自定义按键绑定动作在 vim/neovim 中不起作用

问题描述 投票:0回答:1
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

我已经配置了这些自定义映射。当我使用它们时,它可以完美地工作,对于像

2e
这样的运动,它也会像
2j
一样工作,并向下移动两行。但问题是,当我想执行
d2j
删除两行时,我的绑定不起作用,当用
d2
击键或作为动作时,键会按原样呈现,即 当我输入
d2e
时,它应该执行
d2j
但它确实执行
d2e
我该如何配置?

vim neovim
1个回答
0
投票

Vim 本质上是模态的,意味着它有不同的模式,并且根据模式, 你可以做不同的事情。 Vim 以“正常模式”启动,提供强大的功能 用于导航和文本编辑的命令。毫无疑问,您也会知道插入模式,因为 那就是你写文字的地方。为了回到正常模式,你想出了 映射 :inoremap jj <esc> 仅在插入模式下有效(注意前导

i
)。 顺便说一句,它与您的其他映射无关,所以让我们保持这样。
所有其他映射都是使用 

:nnoremap

命令创建的,这意味着它们 仅在正常模式下工作。 这是一件好事,您几乎不希望它们处于插入模式。想象击中

J
并看到 n 出现在您的文本中。
一个鲜为人知的模式是 

operator-pending 模式

,这就是 Vim 所处的模式 当您输入例如d 并且 Vim 等待动作(或:操作员)。使 你的映射在那里工作,使用

:onoremap
不久之后,您会想要在

视觉模式

中选择文本,并想知道为什么 映射在那里也不起作用。使用 :vnoremap 命令。

针对视觉和操作员挂起模式重复的映射将如下所示:

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 信息的第一站。不是谷歌,不是这样。
事实证明,

:help map-modes

拥有您需要的所有信息。你可以 还跳到

:help :nnoremap
并阅读上面、下面和参考文献 主题。
一般来说,在学习 Vim 时,我确信最好从简单的开始
编辑器本身并在疯狂使用映射之前了解其核心功能,
插件和其他附加内容。使用你的切换键,你将很难
遵循 Vim 上的任何教程,无需在心里撤消您的映射。在将我上面写的内容复制到您的

vimrc

中之前,请认真考虑一下。

掌握 Vim 并不在于你如何弯曲和破坏它,而是在于你能把它玩得多好。学钢琴,你不会把所有的黑键都撕下来放在白键的右边,因为这样看起来更整齐。

虽然选择

hjkl

是因为半个世纪前有人在这些键上画了箭头,但其他一些命令你 地图遵循助记符,如

u
ndo、
e
nd-of-word 等,但现已丢失。
我不能说我理解创建这些映射的动机。它看起来是一个
有点像您使用德沃夏克键盘,只是 

n

不适合 图片。作为我制定的“新用户不应使用插件”规则的例外 如上所述,如果您使用的是深奥的键盘布局,请考虑寻找现有的 使键盘工作的插件。

    

© www.soinside.com 2019 - 2024. All rights reserved.