【问题标题】:Adding navigation keybindings for vim command line为 vim 命令行添加导航键绑定
【发布时间】:2012-06-20 21:25:29
【问题描述】:

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

一个例子是下面的命令:

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

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

显然^0b 之类的东西只会作为字符输入,所以我想做的是为命令映射添加一些 emacs 绑定,例如 <C-a> 以移动到行首,<C-e> 移动到行尾,其他一些则在单词之间移动(至少那些不与其他有用绑定冲突的)。

这可能吗?

【问题讨论】:

标签: vim command-line keyboard-navigation


【解决方案1】:

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

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

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

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

在您的示例中,一旦进入命令行缓冲区,您可以简单地使用 0itabe 更改为 tabe

在此缓冲区中按 Enter 以执行光标所在的命令,然后 Ctrl-c 将退出命令行缓冲区,将您放回命令-线。

【讨论】:

  • +1 这绝对不是日常使用的功能——我直到现在才知道!太棒了!
  • 酷,我不认为有这样的东西存在。肯定会使用它。
【解决方案2】:

我会这样做:

" 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>

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

【讨论】:

  • 你知道是否有办法为单词跳转做这个吗?
  • 谢谢谢谢谢谢。我总是搞乱我的命令行,因为我的大脑进入了命令行模式,即 readline/emacs 键绑定。
猜你喜欢
  • 2019-06-10
  • 2019-03-13
  • 2020-07-01
  • 2017-02-19
  • 2011-10-18
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多