2011-03-20 132 views
51
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 :)VIM:禁用光标/箭头键,但仅限于导航

但它也禁止在该命令的光标酒吧...通常的箭头键让你循环浏览历史

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

+4

谢谢,这是我第一次从问题中得到答案! – 2013-05-20 17:41:26

+0

在插入模式下,我的'上'和'下'键仍然有效。有没有其他人有这个问题? – dylnmc 2015-06-11 06:18:00

回答

0

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

+3

-1:它们不是全模式。它们只是正常的,运营商挂起的,选择和可视模式映射。 – ZyX 2011-03-20 10:11:37

9

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


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

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

谢谢你的回复......这两个都非常有用,而且我的历史确实可以使用箭头键 - 我有一个冲突的问题,使它看起来好像它没有:) – user537339 2011-03-21 08:14:49

+1

或者,你可以使用CmdWinEnter autocmd事件来取消映射命令行窗口的箭头键。 – graywh 2011-03-21 20:45:11

23

你可以通过使用C-nC-p(按Ctrl + N和CTRL历史周期+ p)。

+3

这是关于正确的解决方案。如果你想把手放在家里,那么你就把手放在那里! – progo 2013-04-26 08:48:34

+1

@misha当使用箭头键和禁用这些键时,我想回显“停止愚蠢”。你能告诉我我需要把什么放入.vimrc。我不知道VimScript。 – AbhimanyuAryan 2015-11-21 19:16:28

+1

@AbhimanyuAryan你看到那话了,不是吗? :)无论如何,你要找的线路是这样的:'map :echoerr“Stop being stupid”' – janosrusiczki 2016-03-21 09:16:29

26

添加以下在.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> 
0

使用q:开的分割窗口您命令行。您可以正常导航,因为它是一个使用hjkl以及其他常用vim动作的常规vim窗口,并按回车键以在光标下运行该命令。

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

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

0

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

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