c、i 和 s 命令合并为 VIM

c, i and s commands combined in VIM

我已经使用 VIM 一段时间了,每次都让我感到惊讶。在这个 tutorial 的 "Building Sentences" 部分下,我看到了命令 cisyip 的组合。我使用 Vim 已经有一段时间了,我熟悉普通模式下的大多数命令。我也知道以有意义的方式组合命令以产生组合动作。

然而,我上面展示的例子(cisyip)完全打破了我对正常模式下VIM命令系统的理解。 "c" 代表更改,"i" 代表插入,"s" 代表替代,但组合操作与我预期的不同。我还查看了 VIM 帮助文件,但从未看到说明给定用法的示例。

有人可以澄清一下是怎么回事吗?

在这种情况下,i 不代表 Insert,s 不代表 substitute。 cis = 改变内句。

理解了基本原理后,这就完全合乎逻辑了。每个命令就像一个句子,需要一个Verb(Action)和一个Noun(Object),还有修饰语。

所以第一个按钮是您的操作 C(更改)。现在接下来的击键将不会是动作,直到 c 动作结束(直到提供对象或插入无效序列)。 I(内部)在这里是修饰语,S 是宾语(句子)。

我发现这对更改单词特别有用。如果你只在一个单词上按 cw,你必须将光标放在单词的开头。 使用 ciw 你可以改变整个单词而不考虑光标位置(注意如果你在单词中有 / 或其他一些分隔符,你可能需要 ciW)

顺式

在vim帮助中是这样描述的

:help c

"Delete {motion} text [into register x] and start insert …"

命令c的下一部分是参考"motion"部分。这些命令用于文本对象 selection。关于不同类型的文本对象的解释 selections 你可以在这里找到:

:help text-objects

例如为了 是 – "inner sentence", select [计数] 句……

类比上面的解释和yip一样

:help y

"Yank {motion} text [into register x] … "

与正文selection部分yip

ip – "inner paragraph", select [计数] 段(见段落)…

同一个字母可以有不同的含义。例如。 (/{ 移至 sentences/paragraph 返回,但 ci( or ci{ 表示 change in (...)/{...}

与您的 s 情况相同,s 单独在正常模式下 delete & start insert,但在 cis, das 中表示 sentence

p 情况:仅在普通模式下,表示 paste,但在 cip, yap ... 中表示 paragraph.

:h text-objects

将向您展示text-objects的概念。这是 vim 用户的 必须 技能。 ;-)