{"record":{"id":"3caf635db8c4ccbf","repo":"helix-editor/helix","slug":"no-typablecommand-named","errorCode":null,"errorMessage":"No TypableCommand named '{}'","messagePattern":"No TypableCommand named '(.+?)'","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"helix-term/src/commands.rs","lineNumber":669,"sourceCode":"    fn from_str(s: &str) -> Result<Self, Self::Err> {\n        if let Some(suffix) = s.strip_prefix(':') {\n            let (name, args, _) = command_line::split(suffix);\n            ensure!(!name.is_empty(), \"Expected typable command name\");\n            typed::TYPABLE_COMMAND_MAP\n                .get(name)\n                .map(|cmd| {\n                    let doc = if args.is_empty() {\n                        cmd.doc.to_string()\n                    } else {\n                        format!(\":{} {:?}\", cmd.name, args)\n                    };\n                    MappableCommand::Typable {\n                        name: cmd.name.to_owned(),\n                        doc,\n                        args: args.to_string(),\n                    }\n                })\n                .ok_or_else(|| anyhow!(\"No TypableCommand named '{}'\", s))\n        } else if let Some(suffix) = s.strip_prefix('@') {\n            helix_view::input::parse_macro(suffix).map(|keys| Self::Macro {\n                name: s.to_string(),\n                keys,\n            })\n        } else {\n            MappableCommand::STATIC_COMMAND_LIST\n                .iter()\n                .find(|cmd| cmd.name() == s)\n                .cloned()\n                .ok_or_else(|| anyhow!(\"No command named '{}'\", s))\n        }\n    }\n}\n\nimpl<'de> Deserialize<'de> for MappableCommand {\n    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>\n    where","sourceCodeStart":651,"sourceCodeEnd":687,"githubUrl":"https://github.com/helix-editor/helix/blob/079a789e8cb08ead67f19e1971a1b7438b37354b/helix-term/src/commands.rs#L651-L687","documentation":"MappableCommand::from_str (commands.rs) parses keymap/command strings. A string starting with ':' is treated as a typed (Ex-style) command and looked up by exact name in the typable-command registry (entries like :w, :theme, :debug-start). If no registered TypableCommand has that name, this anyhow error is returned; when it happens while loading config.toml the keymap entry (or the whole config load) fails.","triggerScenarios":"A keymaps entry like `{ C-s = \":save\" }` — the registry name is 'write', so ':save' misses; ':qw' vs ':wq'; referencing a typable command renamed or removed between helix versions.","commonSituations":"Keymaps copied from blog posts or other users' dotfiles targeting a different helix version; simple typos in :command names; referencing commands that only exist with a plugin installed.","solutions":["Fix the name: open the ':' prompt and Tab-complete to discover the exact registered name, or check the typable-commands list in the helix docs for your version.","If the target is a static keymap command, remove the ':' prefix; if it is a recorded key sequence, use the '@' macro form instead.","After editing config, apply `:config-reload` (or restart) and re-test the binding; check the statusline/log for remaining parse errors."],"exampleFix":"# before (config.toml)\n[keys.normal]\nC-s = \":save\"\n# after\n[keys.normal]\nC-s = \":write\"","handlingStrategy":"validation","validationCode":"// validate keymap strings before inserting them\nfn is_valid_binding(s: &str) -> bool {\n    s.parse::<helix_term::commands::MappableCommand>().is_ok()\n}","typeGuard":"fn is_mappable_command(s: &str) -> bool {\n    s.parse::<helix_term::commands::MappableCommand>().is_ok() // FromStr never panics\n}","tryCatchPattern":"match entry.parse::<MappableCommand>() {\n    Ok(cmd) => { map.insert(key, cmd); }\n    Err(err) => log::warn!(\"ignoring bad keymap {entry:?}: {err}\"),\n}","preventionTips":["Discover exact typable names via Tab-completion in the ':' prompt before writing them into config.","After helix upgrades, load config and watch the statusline; a bad ':name' entry is reported at parse time.","Keep keymaps for ':commands' grouped so a failed entry is easy to locate."],"tags":["config","keymap","command-parsing"],"backgroundTag":null,"analyzedSha":"079a789e8cb08ead67f19e1971a1b7438b37354b","analyzedAt":"2026-08-16T09:09:59.668Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}