1

VimI中,可以使用命令一次在多行中插入文本,例如在回答 Stack Overflow 问题How do I insert text at a beginning of a multi-line selection in vi/Vim? . 但是,这只适用于真正的插入。如果我想同时删除一些字符,这是行不通的。

例如,我想改变

000 one
000 two
000 three
000 four

111 one
111 two
111 three
000 four

我会通过调用^V3ggllx从前三行中删除 000 然后^V3ggI111^[在相同位置插入 111 来做到这一点,这对我来说似乎很尴尬。(上面的意思是,进入视觉块模式,标记前三行中的所有零并将它们删除。然后再次进入视觉块模式,标记前三行的开始,进入多行插入模式,插入111 并退出Esc。)

必须有更好的方法来做到这一点。最烦人的是,我必须在删除零后再次选择区域。如果删除后仍选择该区域,那将很好。此外,如果可以在多个插入模式下删除字符,那也很好。但是如果我尝试这个,只有第一行被改变。

4

3 回答 3

5

重选简单快捷gv;然后您可以使用I111^[插入新文本。但是,正如@melpomene 的回答所示,这实际上没有必要。

(但我想我会提到它,以便您可以将这些新知识应用于其他情况。)

于 2013-01-21T15:00:13.940 回答
2

或者,由于您要替换为相同的字符,因此您可以r在选择后使用:

^V2jer1

这具有完全避免插入模式的好处。

顺便说一句,3G完成与 相同的事情3gg

于 2013-01-21T15:01:47.340 回答
1

一旦你选择了你的0s 列,用 s 替换它们1就像点击一样简单r1

<C-v>2jer111

(但尼基塔已经发布了这个……啊啊多任务……)

根据实际用例的复杂性,替换可能是一种可行的选择:

V2j:s/^000/111<CR>

既然我们正在这样做,使用:normal并且<C-a>可以帮助您解决这种特定情况:

V2j:norm 111<C-a>
于 2013-01-21T15:53:10.073 回答