我试图让 vim 中的箭头键无用以习惯 hjkl。
在我的 .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>
问题是,每次按下一个箭头键时,它都会将以下字符串插入到我的文件中:
:echo "No **** for you!
最佳答案
我们有 vi.SE对于 Vim 问题,最好直接在那里发布。无论如何:
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
(在可视模式下)尽可能。
关于vim - 重新映射方向键 vim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38226085/