"dt" Vim 中的动作使用多行

"dt" motion in Vim working with mutiple lines

我经常在 Vim 中使用 dt-some_character 动作来删除 some_character 之前的每个字符。但是,它仅适用于单行。

是否有适用于多行的类似物?

您可以使用 d/some-character<CR>(例如 d/e 然后按 Enter 删除下一个 'e')。

但是请注意,此 修改 last-search register ("/)。

编辑 :

F对应的是?(向后搜索)(d?X包含在内,所以没有dT)。

有几个 插件 扩展了内置的 f / t 动作以覆盖多行:

另一个方向相同,但采用不同方法的方法:

如果要对多行进行同样的操作:

您可以使用 j. and/or 宏

例如删除 2 行中的字符“7”(无宏):

df7j.

要删除到<n>行的字符'7',需要录制宏:

qqdf7j<Esc><n>@q

如果要多行删除从当前位置到第7个字符(也会删除第7个字符):

v/7<Esc>x

正如 Marth 所说,您可以使用 d/a_pattern_to_be_searched 命令。由于您进行了搜索,因此您可以将 n(下一个搜索结果)[或 N(上一个搜索结果)] 命令与删除结合使用。

让我们看一个例子,假设你有这样几行:

This is a first line - 01
This is a new line - 02
And this is the last line - 03

将光标放在 i 上第一行是 ,给出 d/line 你会得到:

This line - 01
This is a new line - 02
And this is the last line - 03

现在如果你给 vim dn 命令,你会得到:

This line - 02
And this is the last line - 03

还要记住,您可以在动作中使用 count 参数,因此如果您在上面的示例中给出 d3/line 命令而不是 d/line ,你会得到:

This line - 03

(我们已经说过 vim:删除第三次出现的 "line"