2016-07-06 84 views
1

我试图在我的vim箭头键没用习惯^hĴķ升重映射箭头键vim的

将几行添加到我的.vimrc文件后,所有工作都正常,但插入模式重新映射。

nnoremap <Down> :echo "No down for you!"<CR> 
vnoremap <Down> :<C-u>echo "No down for you!"<CR> 
inoremap <Down> :<C-o> echo "No down for you!"<CR> 

nnoremap <Up> :echo "No up for you!"<CR> 
vnoremap <Up> :<C-u>echo "No up for you!"<CR> 
inoremap <Up> :<C-o>echo "No up for you!"<CR> 

nnoremap <Left> :echo "No left for you!"<CR> 
vnoremap <Left> :<C-u>echo "No left for you!"<CR> 
inoremap <Left> :<C-o>echo "No left for you!"<CR> 

nnoremap <Right> :echo "No right for you!"<CR> 
vnoremap <Right> :<C-u>echo "No right for you!"<CR> 
inoremap <Right> :<C-o>echo "No Right for you!"<CR> 

的问题是,每一个箭头键被按下时它插入下面的字符串到我的文件:

:回声“无****你

+1

它更好地适应hjkl,这是默认的一个原因,我对vim也很新,但hjkl默认真的有帮助。我最近发现,j和k键也是'evince'中滚动pdf文档的默认值。所以这个习惯在vim之外确实会受益,并且在这里习惯它是一种[有趣的方式](http://vim-adventures.com/) –

+0

感谢@Imran,已经做了vim advetures。这是一个很好的开始。 –

+3

在你的插入模式映射''应该出现在':'后面,例如左边的那个键是'inoremap :echo“没有给你! ' – dNitro

回答

0

!我们有Vim提供的vi.SE,总是比较好直接发布。总之:

Sardorbek的回答是正确的,映射到<nop>的正确解决方案。即此:

noremap <Up> <nop> 
noremap <Down> <nop> 
noremap <Left> <nop> 
noremap <Right> <nop> 

inoremap <Up> <nop> 
inoremap <Down> <nop> 
inoremap <Left> <nop> 
inoremap <Right> <nop> 

然而,你inoremap被行打印到文件的原因是因为你没有在你映射的开头使用<c-o>:之后,因此正常模式下的命令,目前正在运行是e(不是:echo)。我相信你看到的线实际上是:

:cho "No **** for you! 

而且不

:echo "No **** for you! 

此外,<c-o>只允许一个正常模式下的命令,但你需要两个:回声消息,并且否定箭头关键运动。

在本质上,下面是可怕(真的太可怕了,请不要这样做),但会工作:

inoremap <Down> <esc>:echo "No down for you!"<CR>ki 
inoremap <Up> <esc>:echo "No up for you!"<CR>ji 
inoremap <Left> <esc>:echo "No left for you!"<CR>li 
inoremap <Right> <esc>:echo "No Right for you!"<CR>hi 

在一般情况下,使用<esc>最好<c-o>c-u(视觉模式)尽可能。