为vim命令行添加导航键绑定

时间:2012-06-18 20:50:41

标签: vim command-line keyboard-navigation

也许我没有使用正确的术语,但我正在努力寻找一种方法来添加一些键绑定,以便在vim中导航命令行时使用。

一个例子是以下命令:

:e /really/long/path/that/I/dont/want/to/reenter

并意识到我实际上想要:tabe而不是制表符,或者输入一个长正则表达式模式并在其中发现一个拼写错误。

显然,^0b这样的内容只会作为字符输入,所以我要做的是为命令映射添加一些emacs绑定,例如{ {1}}移动到行的开头,<C-a>移动到行的末尾,其他一些移动到单词之间(至少那些与其他有用绑定不冲突的行)。

这可能吗?

2 个答案:

答案 0 :(得分:14)

正如其他人所提到的,您的特定键绑定已经存在:

  • Ctrl-b 将您带到命令行的开头,
  • Ctrl-e 将您带到命令行的末尾。

要获得完整的命令行编辑体验,您可以将vim命令行转换为可编辑的命令缓冲区,以解决此类问题,而不是使用新的键绑定。

在命令行中输入内容时,按 Ctrl-f 进入命令行缓冲区。您将处于正常模式,可以浏览并编辑命令行,以及与命令历史记录中的先前命令进行交互和编辑。

在您的示例中,一旦进入命令行缓冲区,您只需使用0itabe更改为tabe

点击在此缓冲区中输入以执行光标所在的命令, Ctrl-c 将退出命令行缓冲区,使您返回到命令-line。

答案 1 :(得分:6)

这是我将如何做到的:

" adding emacs keybindings for command mode
cnoremap <c-a> <Home>
cnoremap <c-e> <End>

编辑:

在帮助文件:help cmdline中,我找到了

:cnoremap <C-A> <Home>
:cnoremap <C-F> <Right>
:cnoremap <C-B> <Left>
:cnoremap <Esc>b <S-Left>
:cnoremap <Esc>f <S-Right>

最后两个是跳跃的词 - 快乐跳跃