Vim 跳转到字符并在其后更改的动作

Vim motion to jump-to-character and change after it

我正在寻找将结合以下命令的动作:f=lC(例如,我在一条线上,我想更改 = 右侧的所有内容).

如果我们有这样的:v_ar something = 123; 那么在执行 f=lC 之后,我们将剩下 var something =_,光标位于 _ 的位置。

是否有针对此的原生 vim 动作?我找不到,在 targets.vim 插件中也找不到。

提前致谢。

做个映射:

:nnoremap s f=lC

现在只需按 s 就可以了(当然你可以使用任何其他字母,s 只是我很少使用的一个)。

您可以使用gn 命令。这将移动到下一个搜索匹配项,因此在您的情况下首先搜索您的模式,例如/=\zs.*,然后输入 cgn,你应该会得到 var something = 现在你可以重复这个过程,按 .

请注意,gn 是在 Vim 7.4

中引入的

如果多次重复该动作,您可以创建法线贴图并执行此操作 一下子;正如其他答案中提到的。或者你可以创建一个 运算符映射,在我看来这可能更合适。 来自 :h omap-info:

Operator-pending mappings can be used to define a movement command that can be used with any operator. Simple example: :omap { w makes y{ work like yw and d{ like dw.

如您所见,这允许您将地图与现有命令一起使用。 作为您的案例的示例:

onoremap <silent> = :<C-U>normal! 0f=lv$h

这会创建一个动作 (=),激活后会清除范围(使用 <C-U>) 并选择发送回 原始命令。选择是第一个左边的 等号 (0f=l) 直到行尾 ($h)。请注意 h 是 用于取消选择由 $ 标记选择的换行符。

然后您可以使用 d=c= 来执行您想要的操作。

创建一个询问您需要查找哪个字符的命令是 也可以,但更复杂。在中创建更多这样的组合 你的 .vimrc 如果你认为它们有用。这不是 "polluting" 任何手段,如果你判断它被经常使用的话。