vim - 重新映射方向键 vim

标签 vim

我试图让 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/

相关文章:

Vim 自动命令 : writing a read-only file?

vim - 使用鼠标选择时禁用 Macvim 滚动

vim - 为什么我要逃避决赛]

bash - 如何使 bash tab 补全表现得像 vim tab 补全并循环匹配匹配项?

vim - 在 Tmux 复制模式下滚动 vim 窗口?

linux - 命令在 EC2 中不起作用?

vim - 我可以修复 Vim 中的 Groovy 缩进吗?

python - jedi-vim 是否与 YouCompleteMe 冲突?

ios - .vimrc 中的 "set number"在 Vim for iOS 中不工作

vim - 检查 map 是否存在于 vimScript 中