自定义键绑定运动在Vim/neovim中不工作

yi0zb3m4  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(177)
nnoremap j n
nnoremap k e
nnoremap l u
nnoremap h i
inoremap jj <esc>
       
nnoremap e j
nnoremap u k
nnoremap i l
nnoremap n h

字符串
我已经配置了这些自定义Map。当我使用它们时,它可以完美地工作,也可以像2e这样的运动,它将作为2j工作,并向下移动两行。但问题是当我想执行d2j删除两行时,我的绑定不工作,当击中键与d2或作为一个议案的关键是渲染,因为它是即当我键入d2e它应该做d2j,但它是d2e,而不是我如何配置这个?

efzxgjgh

efzxgjgh1#

Vim本质上是模态的,这意味着它有不同的模式,根据模式的不同,你可以做不同的事情。Vim从 * 正常模式 * 开始,它提供了强大的导航和文本编辑命令。你肯定也知道 * 插入模式 *,因为那是你写文本的地方。要回到 * 正常模式 *,你提出了一个Map:inoremap jj <esc>,它只在插入模式下是活动的(注意前面的i)。顺便说一句,它和你的其他Map没有关系,所以我们就这样吧。
所有其他Map都是用:nnoremap命令创建的,这意味着它们只能在正常模式下工作。这是一件好事,你几乎不希望它们处于插入模式。想象一下,点击J,看到文本中出现n
一个不太为人所知的模式是 operator-pending mode,当你输入d,Vim等待一个动作时,Vim就处于这种模式。要使你的Map在那里工作,使用:onoremap
不久之后,您将想在 visual mode 下选择文本,并想知道为什么Map在那里不起作用。使用:vnoremap命令。
您的Map,在可视和操作员挂起模式下重复,将如下所示:

nnoremap j n
onoremap j n
vnoremap j n
nnoremap k e
onoremap k e
vnoremap k e
nnoremap l u
onoremap l u
vnoremap l u
nnoremap h i
onoremap h i
vnoremap h i
       
nnoremap e j
onoremap e j
vnoremap e j
nnoremap u k
onoremap u k
vnoremap u k
nnoremap i l
onoremap i l
vnoremap i l
nnoremap n h
onoremap n h
vnoremap n h

字符串
你在评论中写上你是新手,这没什么好羞愧的。如果你是Vim新手,你应该知道如何阅读内置的:help,你只需要在正常模式下输入:help,然后选择你感兴趣的命令。Ctrl-D会给予你建议。:help应该是你获取Vim信息的第一站。不是谷歌,不是SO。
事实证明,:help map-modes有你需要的所有信息。你也可以跳到:help :nnoremap,阅读上面、下面和引用的主题。
一般来说,在学习Vim时,我相信最好先从编辑器本身开始,学习它的核心功能,然后再疯狂地学习Map、插件和其他附加功能。随着你的键的切换,你很难在不解除Map的情况下遵循任何关于Vim的教程。在将我上面写的东西复制到你的vimrc之前,认真考虑一下。
虽然选择hjkl是因为半个世纪前有人在这些键上画了箭头,但你Map的其他一些命令遵循的助记符,如u ndo,e nd-of-word等,现在已经丢失了。
掌握Vim并不在于你如何弯曲和破坏它,而在于你能把它弹得多好。学习钢琴,你不会把所有的黑色键都拆下来,把它们放在白色键的右边,因为这样看起来更整洁。
我不能说我理解创建这些Map的动机。它看起来有点像你在使用Dvorak键盘,只是n不适合在图片中。作为我上面制定的“新用户不应该使用插件”规则的例外,如果你使用的是深奥的键盘布局,考虑寻找一个现有的插件来使键盘工作。

相关问题