2012-03-28 115 views
2

我有这种格式的一些文字(如果Oracle列定义你想知道)通过了空间......Vim的 - 搜索和替换所有字符中的每一行

column1 DATE, 
column2 VARCHAR2(6), 
column3 VARCHAR2(15) 

我一直在努力弄清楚如何用“VARCHAR2(255)”替换每行传递空间的所有内容,但尚未成功。

我知道我可以通过/\s搜索并找到空间,但我无法弄清楚如何获取字符串的其余部分。当我使用/\s*时,突出显示所有文字。我试图使用/\s.+但我得到“模式未找到”。

如何获取传递每行中空间的所有文本,并用另一个字符串全局替换它?

回答

2

最简单的方法:

:%s/ .*/ VARCHAR(255)

VIM使用稍显怪异的正则表达式的语法,所以如果你想要做\ S +你必须使用\ S \ +

1

方式一:

:%s/\(\s\+\).*$/\1VARCHAR(255)/ 

对于每一行%,发现第一空间\(\s\+\),将其保存在第1组(\1),与.*$线的比赛休息,并用文字字符串替换它。

编辑地说,你必须在正则表达式中魔术模式逃脱+。您可以在正则表达式的开头使用非常神奇的模式,\v。有关详细信息,请参见:he magic

2

如何

:%s/\s\S\+$/ VARCHAR(255)/ 
+0

为什么不使用'qq0f C VARCHAR(255)q',然后':%norm!@ q'? [是不是替换单线程乏味的想法?](http://stackoverflow.com/questions/9903660/vi-how-to-generate-a-number-sequence#comment12636451_9903819);-) – 2012-03-29 03:24:14

+0

感谢您指出这一点当然,这是一个可行的解决方案,你应该添加一个答案。如果你将它作为一个发布,我会加倍努力,这比我得到的有效解决方案要多得多^^ – hochl 2012-03-29 08:19:15

+0

它有时会发生。我认为,这个命令至少应该有一个投票权。 +1 – 2012-03-29 09:17:34

1

除了使用替换命令,考虑通过 重复一系列普通模式命令来解决问题:

:%norm!f C VARCHAR(255)