2011-03-16 60 views
3

我试图在VIM中用“=”代替所有多个“ - ”字符(来自行的开始处)“Vim正则表达式替换问题

p.e.将“-----”替换为“=====”
或将“----------”替换为“==========”

I创建此正则表达式:

%s/^-\{2,}/= ????/g 

有谁知道我可以如何复制“=”替换? (我有什么“=”后面放)

回答

5

试试这个:

:%s/^-\{2,}/\=substitute(submatch(0), '-','=','g')/ 

或:

:%s/^-\{2,}/\=repeat('=',len(submatch(0)))/ 

详情请参阅:help sub-replace-\=

+0

非常感谢所有人:) – Reman 2011-03-16 19:12:05

2

我敢肯定有一个更好的答案,但实际来看,我想这样做,因为只是为了简单起见,两个独立的操作:

%s/--/==/g 
%s/=-/==/g 

第一更换所有双出现,这会变成-----====-。然后修复使用第二剩菜(=-)。我希望能看到更优雅的答案,不过,如果有可能的事情。

2

技术上,%s/-/=/g做这项工作,但在整个文件中,每-

如果你想替换也开始-行我会做这种方式:

g/^-/s/-/=/g 

或者,如果你有第一-之前的一些空间:

g/^\s*-/s/-/=/g 

在线路

剩下的问题到达这样的:

----------- the-composite-word 

他们变成:

=========== the=composite=word 

为了解决这个问题,有很多方式。我不是那个主人建议一个非常一般的方式,但这可能适用于单词之间的破折号:

g/^-/s/\w\@<!-/g