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

use*_*339 55 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>
Run Code Online (Sandbox Code Playgroud)

这是我用来禁用光标导航,帮我坚持hjkl :)

但它也会禁用命令栏上的光标...通常,使用箭头键可以循环显示历史记录

是否可以仅禁用光标键进行导航,而不是历史记录?

小智 28

在您的.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>
Run Code Online (Sandbox Code Playgroud)


mpe*_*kov 25

您可以使用C-n和循环历史记录C-p(分别为Ctrl + n和Ctrl + p).

  • 这是关于正确的解决方案.如果你想把手放在家里,那你就把手放在那里! (4认同)

ZyX*_*ZyX 10

您发布的代码不应该在命令行模式下禁用历史记录导航,您确定没有cnoremap <Up> <Nop>或在noremap! <Up> <Nop>某处?尝试verbose cmap <Up>它应该显示是否<Up>为命令行模式重新定义了键.


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

nnoremap <expr> <Up> ((bufname("%") is# "[Command Line]")?("\<Up>"):(""))
Run Code Online (Sandbox Code Playgroud)


not*_*ere 6

对我来说,这有效:

map <Left> <Nop>
map <Right> <Nop>
map <Up> <Nop>
map <Down> <Nop>
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*iva 0

更改noremapnnoremap将映射应用于正常模式,否则它们是全局所有模式映射。

  • -1:它们不是全模式。它们只是正常、待操作、选择和可视模式映射。 (3认同)