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

时间:2011-03-20 09:51: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>

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

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

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

7 个答案:

答案 0 :(得分: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>

答案 1 :(得分:25)

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

答案 2 :(得分:10)

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


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

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

答案 3 :(得分:6)

对我而言,这有效:

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

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

答案 4 :(得分:1)

使用q:打开命令行的拆分窗口。您可以正常导航,因为它是使用hjkl的常规vim窗口和其他常用的vim动作,然后按Enter键在光标下运行命令。

请勿使用箭头键在命令行历史记录中导航。

顺便提一下,您还可以使用q/q?访问搜索记录。

答案 5 :(得分:0)

noremap更改为nnoremap以将映射应用于普通模式,否则它们是全局全模式映射。

答案 6 :(得分:0)

您也可以考虑重新映射它们以在分割窗口之间移动。 这会禁用箭头键以在文件内进行方向移动,但允许您在拆分窗口之间移动。

noremap <up> <C-w><up>
noremap <down> <C-w><down>
noremap <left> <C-w><left>
noremap <right> <C-w><right>