在Vim

时间:2016-12-18 09:25:17

标签: vim replace vi

假设我在Vim中打开了一个文本文件:

Hello Tom. How's your mom?
HellO Sam. Pass me the Jam.
Hell0 Jim. Do you know Vim?

我可以使用Visual块技巧将这三个名字替换为“friend”。但如果三个名字的长度不同呢?

Hello Kat. You're not fat...
HellO Mike. Where's Pike?
Hell0 James. Hunger games?

是否可以用“朋友”取代Cat,Mike和James?如果它们被相同的字符包围,例如HTML标签?

Hello <Steph>. You seen Jeff?
HellO <Mat>. Here's your hat.
Hell0 <Jenny>. Got a penny?

如果这些是可行/容易的,有没有办法在文件中的类似段落中为单个段落执行此操作?感谢

2 个答案:

答案 0 :(得分:2)

  

但如果三个名字长度不同会怎么样?

cell.CountLabel.tag=1000;

这将替换每行第一个句点之前的单词。

  

如果它们被相同的字符包围,例如HTML标签?

:%s/\m\w\+\ze\./friend/

这将替换每行第一对:%s/\m\w\+\ze>\./friend/ 之前的单词。

此外:

>.

这将取代每一行({1}},:%s/\m\<\%(Steph\|Mat\|Jenny\)\>/friend/ Steph的第一次出现。

  

是否可以通过文件中的相似段落为单个段落执行此操作?

根据“段落”的含义,您可以使用Mat。或不。 :)

答案 1 :(得分:1)

:%norm WcWFriend

:  ...... command mode
%  ...... whole file
norm .... normal mode
W ....... big word (jump to)
cW ...... change word (change it)

Obs:大词包括“ - ”分隔符和html标记