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:)
但它也会禁用命令栏上的光标......通常,使用箭头键可以循环浏览历史记录
是否可以仅禁用光标键进行导航,而不是历史记录?
答案 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-n
和C-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>