denisidoro/navi · error · anyhow
No command and options captured in the line `{}`
Error message
No command and options captured in the line `{}` What it means
Thrown by `parse_variable_line` in src/parser.rs when capture group 2 (the command-and-options section after the variable) is missing from the regex match. The variable was found, but there is no command portion to execute.
Source
Thrown at src/parser.rs:98
(false, true) => SuggestionType::SingleSelection,
};
opts.suggestion_type = suggestion_type;
Ok(opts)
}
fn parse_variable_line(line: &str) -> Result<(&str, &str, Option<FinderOpts>)> {
let caps = VAR_LINE_REGEX
.captures(line)
.ok_or_else(|| anyhow!("No variables, command, and options found in the line `{}`", line))?;
let variable = caps
.get(1)
.ok_or_else(|| anyhow!("No variable captured in the line `{}`", line))?
.as_str()
.trim();
let mut command_plus_opts = caps
.get(2)
.ok_or_else(|| anyhow!("No command and options captured in the line `{}`", line))?
.as_str()
.split("---");
let command = command_plus_opts
.next()
.ok_or_else(|| anyhow!("No command captured in the line `{}`", line))?;
let command_options = command_plus_opts.next().map(parse_opts).transpose()?;
Ok((variable, command, command_options))
}
fn without_prefix(line: &str) -> String {
// The prefix character (#, %, @) is always 1-byte ASCII.
// Skip it and let trim() handle any whitespace separator, including
// multi-byte whitespace like non-breaking space (\u{a0}).
line.get(1..).unwrap_or("").trim().to_string()
}
#[derive(Clone, Default)]
pub struct FilterOpts {View on GitHub (pinned to f7330b9ad5)
Solutions
- Add the command after the variable and colon, e.g. `#my-var: cat file.txt`
- Remove the now-empty variable definition if it is no longer needed
- Check the file for truncated lines and restore the full definition
Example fix
// before #my-var: // after #my-var: cat file.txt --- --prompt "Pick:"
Defensive patterns
Strategy: validation
Validate before calling
let has_command = |line: &str| {
line.split_once(':').map_or(false, |(_, rhs)| !rhs.trim().is_empty())
};
// require has_command(line) before parsing Prevention
- Always pair a variable definition with a command after the colon
- Delete the whole line if the command is gone — don't keep a bare variable
- Check for editor/clipboard truncation when pasting long lines
When it happens
Trigger: A variable line matching the regex for the variable part but lacking the command after the colon, e.g. `#my-var:` with nothing following, or a line where the separator layout prevents group 2 from capturing.
Common situations: Config lines where the command was deleted but the variable definition kept; line truncation from editors or copy-paste; writing only options without a command before `---`.
Related errors
- No variables, command, and options found in the line `{}`
- No variable captured in the line `{}`
- Given options are missing a closing quote
- No value provided for the flag `{}`
- No command captured in the line `{}`
AI-assisted analysis of denisidoro/navi@f7330b9ad5 (2026-09-03).
Data as JSON: /api/errors/040e2751e481bb1a.
Report an issue: GitHub.