2011-12-13 30 views
10

有一種觀點認爲,在vim中工作時,不應該使用Esc鍵(改用ctrl + c),不要使用箭頭鍵(使用h,j,k,l )在你的鍵盤上。但是很難不使用這些鍵。我認爲有一種方法可以禁用.vimrc中的這些鍵,所以除了使用ctrl + c和hjkl之外,沒有其他選擇。如何在vim中禁用Esc和光標鍵

我已經搜索了一下,發現了一個解決方案link。 所以我插在我的.vimrc文件中的以下內容:

inoremap <Up>  <NOP> 
inoremap <Down> <NOP> 
inoremap <Left> <NOP> 
inoremap <Right> <NOP> 
inoremap <Esc> <NOP> 
noremap <Up>  <NOP> 
noremap <Down> <NOP> 
noremap <Left> <NOP> 
noremap <Right> <NOP> 
noremap <Esc> <NOP> 

但是,這是行不通的。將此添加到我的.vimrc會將我的映射斷開到 功能鍵。另一個問題是,它並沒有阻止箭頭鍵的功能,而是當我在正常模式下按下時執行多個動作 - 光標向上移動一行,創建新行並插入字符「B」。

如何禁用我的vim 7.2光標鍵和Esc鍵而不破壞其他任何東西?

+8

雖然可能有意見,該意見是完全錯誤的。 'Ctrl-c'的功能與'Esc'或'Ctrl- ['不一樣。您可能已經瞭解了這一點,但如果有人閱讀它,Ctrl-c將跳過「InsertLeave」autocmd事件以及展開任何待處理的插入模式縮寫。這意味着如果您開始使用「Ctrl-c」退出插入模式,而不是正確地執行操作,那麼您正在使用的依賴於這些函數的任何腳本都將被中斷。總之,習慣於習慣是一種壞習慣,我強烈建議不要這樣做。 –

+0

@RandyMorris你有任何關於重新映射箭頭鍵的問題嗎? – Robz

+0

@Robz根本就沒有。他們默認提供了一個重複的映射,所以他們是一個很好的候選人,可以映射到更有用的東西。 –

回答

15

如果你在終端中使用vim,你絕對不應該重映射Escape。由於在vim中處理密鑰的方式(以及一般可能的終端),重新映射會破壞你不想改變的各種密鑰。要了解我的意思,請執行以下操作。

  1. 打開沒有啓動文件的vim:vim -u NONE --noplugin -N
  2. 進入插入模式。
  3. Ctrl-v後跟任何功能鍵,如<F2>

注意輸入的序列。它很可能從^[開始,這是一個文字Escape

現在打開請嘗試以下操作:

  1. :inoremap <esc> NO ESCAPE FOR YOU
  2. 進入插入模式。
  3. 按下任何功能鍵,如<F2>

如果上一個序列將轉義字符顯示爲<F2>按鍵的一部分,則您會看到我們的新字符串打印在屏幕上。事實上,現在你已經有了映射,試着用光標鍵移動。你可能會注意到同樣的離奇行爲。

總之,不要重映射,我幾乎保證你會有意想不到的後果。

6

下面是一個非怪異的方式來實現你想要的:把你的拇指大小的紙弄成碎片,然後將它們粘到鑰匙上。當你的手指試圖接觸到他們時,你會碰到紙。他們會成爲一個很好的提醒。保持他們在那裏錄音,直到你停止碰撞他們。

+2

這假設你只使用vim,我們中的一些人也想在其他應用程序之間切換。 – ideasman42

3

你有什麼接近:

inoremap <esc> <NOP> 
inoremap <Left> <NOP> 
inoremap <Right> <NOP> 
inoremap <Up> <NOP> 
inoremap <Down> <NOP> 
nnoremap <Left> <NOP> 
nnoremap <Right> <NOP> 
nnoremap <Up> <NOP> 
nnoremap <Down> <NOP> 

此行是造成麻煩你:

noremap <Esc> <NOP> 
+1

謝謝!正如我所看到的,這與我所尋找的東西非常接近。箭頭鍵不起作用(這是所需的操作),但「Esc」鍵仍然從插入模式切換到正常模式。我想刪除這種行爲。 – bessarabov