0

我试图停止在 vim 中使用箭头键。但是<nop>,我不想像其他人那样将它们设置为 ,而是希望它们显示错误消息。这在正常模式下执行此操作:

noremap <up>    :echoerr 'USE K TO GO UP'<CR>
noremap <down>  :echoerr 'USE J TO GO DOWN'<CR>
noremap <left>  :echoerr 'USE H TO GO LEFT'<CR>
noremap <right> :echoerr 'USE L TO GO RIGHT'<CR>

我尝试在插入模式下做同样的事情,但没有奏效:

inoremap <up>    :echoerr 'USE K TO GO UP'<CR>
inoremap <down>  :echoerr 'USE J TO GO DOWN'<CR>
inoremap <left>  :echoerr 'USE H TO GO LEFT'<CR>
inoremap <right> :echoerr 'USE L TO GO RIGHT'<CR>

当我在插入模式下按下时,这会打印:echoerr 'USE K TO GO UP'我的光标所在的位置。

如何修复inoremap指令以使其按预期工作?(另外,解释为什么它不起作用会有所帮助)。

编辑:感谢所有帮助过我的人。我最终使用了这个:

noremap <up>    :echom 'USE K TO GO UP'<CR>
noremap <down>  :echom 'USE J TO GO DOWN'<CR>
noremap <left>  :echom 'USE H TO GO LEFT'<CR>
noremap <right> :echom 'USE L TO GO RIGHT'<CR>
inoremap <up>    <ESC>:echom 'USE K TO GO UP'<CR>
inoremap <down>  <ESC>:echom 'USE J TO GO DOWN'<CR>
inoremap <right> <ESC>:echom 'USE L TO GO RIGHT'<CR>
inoremap <left>  <ESC>:echom 'USE H TO GO LEFT'<CR>         

vim-autoclose 插件在编辑模式下给我上/下键带来了麻烦。我刚刚卸载了插件。

4

3 回答 3

6
:inoremap <up> <Esc>:echoerr 'MSG HERE'<CR>
于 2012-06-11T21:08:44.613 回答
4

而不是使用<Esc>:echoe 'message'<CR>我会<C-o>:echoe 'message'<CR>在这里建议:它不会离开插入模式。<C-o>:throw 'message'<CR>让它更烦人:你会得到Press ENTER提示,而不仅仅是突出显示的消息:

inoremap <Up> <C-o>:throw 'USE “&lt;Esc>k” TO GO UP'<CR>

. 请注意,我还建议使用等价物echohl ErrorMsg | echomsg 'Message' | echohl NONE而不是:echoerr: 虽然它在这里无关紧要,但:echoe应该被遗忘,因为它高度依赖于上下文:不像:echomwhich 从不​​中断执行并且:throw总是这样做,:echoe如果它在try块内则中断执行,否则不这样做。这使得任何构造都像

SomeCommand
if error_cond
    echoe 'abc'
endif
SomeCommand2

不稳定:如果为真,你永远不知道是否SomeCommand2会被执行。error_cond这里无关紧要,因为没有后续命令并且不太可能在try块内运行,但不要让自己认为这:echoe可能是回显错误的好选择。

于 2012-06-12T06:30:44.210 回答
0

你有比尝试使用hjkl而不是箭头更紧迫的问题。

:help mapping例如,您应该阅读。

当你按下 时,inoremap <up> :echoerr 'USE K TO GO UP'<CR>你指示 Vim在光标处输入。这是一种插入模式映射,因此,只要您不包含映射序列或映射序列中的某个位置,整个事物就会按原样插入。:echoerr 'USE K TO GO UP'<CR><Up><Esc><C-o>

为了执行命令序列,您必须首先退出插入模式;因此<Esc>在埃里克的回答中。

于 2012-06-11T21:55:10.593 回答