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>
您可以使用Cn
和Cp
循环查看历史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>