2011-12-13 55 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