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