重新映射箭头键vim

时间:2016-07-06 14:07:27

标签: vim

我试图让我的箭头键在vim无用,习惯 h j k l

在我的.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 个答案:

答案 0 :(得分: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(在可视模式下)。