2011-03-20 133 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>