在Vim的命令模式下导航

72

我是一个长期使用Emacs的用户,正在学习Vim。在Emacs中,我可以使用与其他缓冲区相同的导航键盘快捷方式来浏览迷你缓冲区(用于发出诸如C-x C-s之类的命令)。例如,即使在迷你缓冲区中,我也可以使用C-f向前移动一个字符。我也可以使用箭头键,但它们离得太远了。

是否有任何键盘快捷键可在Vim命令模式(:)中进行导航,而不使用箭头键 - 相当于Emacs的C-f、C-b?谢谢。


可能是 如何在 Vim 命令行中移动? 的重复问题。 - 200_success
5个回答

99

除了 Greg Hewgill 的回答,你还可以使用 q: 打开命令行窗口,在此处你可以使用 Vim 的编辑功能。


5
我对 Vim 的经验告诉我,你永远不会停止学习新的惊人功能。;-) - Boldewyn
28
如果你已经在命令行界面,并且想要保留你所写的内容并进入命令行窗口,可以输入ctrl-F。因此,":<C-F>"应该能够实现与"q:"相同的效果。如果无法正常工作,则可能是'compatible'已设置或者你将某些其他按键映射到了'cedit'选项。有关详细信息,请参阅:help q:。 - bhh1988
8
这个命令曾经是我最烦恼的命令之一。现在它成为了我最有用的命令之一 :) - Dzung Nguyen
为什么我在使用“q:”或“:<C-f>”时无法粘贴“%”寄存器,而只能使用普通的“:”? - MaikoID
5
一开始每次这个突然弹出来都会让我烦恼了好几年。现在我知道它的作用了,而且我很喜欢它! - Max Coplan
2
将此设置为默认值:nnoremap : q:i - Rudolf Adamkovič

49

以下是来自 Vim 帮助文档中的一些内容:

CTRL-B or <Home>
        cursor to beginning of command-line
CTRL-E or <End> 
        cursor to end of command-line
CTRL-H              
<BS>        Delete the character in front of the cursor (see |:fixdel| if
        your <BS> key does not do what you want).
<Del>       Delete the character under the cursor (at end of line:
        character before the cursor).
CTRL-W      Delete the |word| before the cursor.  This depends on the
        'iskeyword' option.
CTRL-U      Remove all characters between the cursor position and
        the beginning of the line.  

36

我在我的.vimrc文件中有以下内容:

cnoremap <C-a> <Home>
cnoremap <C-e> <End>
cnoremap <C-p> <Up>
cnoremap <C-n> <Down>
cnoremap <C-b> <Left>
cnoremap <C-f> <Right>
cnoremap <M-b> <S-Left>
cnoremap <M-f> <S-Right>

1
这让我感到非常高兴。对于遇到绑定<Meta>问题的用户,请参见https://dev59.com/E2s05IYBdhLWcg3wB9af#27206531。 - cdosborn
我发现将Vim命令模式和shell绑定对齐,特别是如果你正在使用Vi绑定,效果很好。我会改进上面的建议,以避免覆盖现有的有用绑定;例如,C-f,因为它已经被有用地绑定到“在缓冲区中编辑当前行的命令模式”。在Vim的命令模式中,^b已经绑定了(类似于Emacs的)<Home>,而^ascreen(1)(以及许多人的tmux(1))冲突。 - Ben Fowler

11

使用默认的键位绑定,vim不提供除箭头键以外的命令行编辑导航。但是,请参考:help cmdline-editing了解如何使用:cnoremap命令设置替代键位。


1

我使用了<C-p><C-n>来分别导航之前和之后的命令。

顺便说一句,我没有像Tassos那样自定义绑定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接