2013-01-21 28 views
1

Vim中,可以使用I命令一次在多行中插入文本,如an answer Stack Overflow question How do I insert text at beginning of a multi-line selection in vi/Vim?。但是,这只适用于真正的插入。如果我想同时删除一些字符,这不起作用。在Vim中更改文字矩形

比如,我想通过调用^V3ggllx从第一三行删除000改变

000 one 
000 two 
000 three 
000 four 

111 one 
111 two 
111 three 
000 four 

我会做这个,然后^V3ggI111^[插入在111相同的职位,这对我来说似乎很尴尬。 (上面的意思是,进入可视化的块状模式,标记前三行中的所有零并移除它们,然后再次进入可视块模式,标记前三行的开始,插入多行的模式,插入111并退出Esc。)

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

+0

感谢大家。这个具体问题的最佳答案当然是melpomenes,但其他答案也提供了其他非常有用的提示。 – radlan

回答

5

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

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

2

或者,因为你用相同的字符替换,您可以选择使用后r

^V2jer1 

这有利于避免插入模式。

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

1

一旦你有你的0栏目中选择,用1小号取代它们是打r1一样容易:

<C-v>2jer111 

(但尼基塔已经张贴了这个... AAAH多任务...)

根据您的实际使用情况的复杂程度,替代可能是一种可行的替代方案:

V2j:s/^000/111<CR> 

Si NCE我们在它,使用:normal<C-a>可以帮助你这个具体情况:

V2j:norm 111<C-a> 
+0

使用'^ A'有趣的方法,但是请注意,如果'nrformats'包含'octal'(默认情况下),Vim将000'解释为八进制,而'000'上的'111^A'产生'0157 '。 '73^A'会给出'0111',但仍然带有前导零。 –

+0

我总是忘记*我的*设置不是*每个人*的设置。 ;-) – romainl