VIM:禁用光标/箭头键,但仅用于导航

inoremap <Up> <NOP> inoremap <Down> <NOP> inoremap <Left> <NOP> inoremap <Right> <NOP> noremap <Up> <NOP> noremap <Down> <NOP> noremap <Left> <NOP> noremap <Right> <NOP> 

这是我用来禁用游标导航,帮我坚持hjkl 🙂

但它也禁用了命令栏上的光标…通常使用箭头键可以循环查看历史logging

是否可以禁用光标键仅用于导航,而不是历史?

.vimrc文件中添加以下内容:

 " Disable Arrow keys in Escape mode map <up> <nop> map <down> <nop> map <left> <nop> map <right> <nop> " Disable Arrow keys in Insert mode imap <up> <nop> imap <down> <nop> imap <left> <nop> imap <right> <nop> 

您可以使用CnCp循环查看历史logging(分别为Ctrl + n和Ctrl + p)。

你已经发布的代码不应该禁用命令行模式下的历史导航,你确定没有cnoremap <Up> <Nop>或者noremap! <Up> <Nop> 某个地方的noremap! <Up> <Nop> ? 尝试verbose cmap <Up>它应该告诉你是否为命令行模式重新定义了<Up>键。


如果说“命令栏”时,你的意思是命令行窗口,你可以尝试以下方法:

 nnoremap <expr> <Up> ((bufname("%") is# "[Command Line]")?("\<Up>"):("")) 

对我来说,这个工作:

 map <Left> <Nop> map <Right> <Nop> map <Up> <Nop> map <Down> <Nop> 

取自: https : //github.com/garybernhardt/dotfiles/blob/master/.vimrc#L148

noremap更改为nnoremap以将映射应用到正常模式,否则它们是全局全模式映射。

使用q:打开命令行的拆分窗口。 你可以在其中正常导航,因为它是一个使用hjkl和其他通常的vim动作的常规vim窗口,并按回车键来在光标下运行命令。

不要使用箭头键在命令行历史中导航。

顺便说一句,你也可以使用q/q?访问你的search历史loggingq?

您也可以考虑重新映射它们在拆分窗口之间移动。 这将禁用文件内的方向移动的箭头键,但可以让您在拆分窗口之间移动。

 noremap <up> <Cw><up> noremap <down> <Cw><down> noremap <left> <Cw><left> noremap <right> <Cw><right>