在Vim中更改矩形文本

时间:2013-01-21 14:44:39

标签: vim insert block

Vim中,可以使用I命令一次插入多行文本,例如an answer Stack Overflow question How do I insert text at 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 退出。)

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

3 个答案:

答案 0 :(得分:5)

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

(但我想我会提到它,所以你可以在其他情况下应用这些新知识。)

答案 1 :(得分:2)

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

^V2jer1

这样可以完全避免插入模式。

顺便说一下,3G完成了与3gg完全相同的事情。

答案 2 :(得分:1)

选择0列后,将其替换为1就像点击r1一样简单:

<C-v>2jer111

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

根据您的真实用例的复杂程度,替换可能是一个可行的选择:

V2j:s/^000/111<CR>

既然我们就这样做了,使用:normal<C-a>可以帮助您解决这种特殊情况:

V2j:norm 111<C-a>