VIM:循环通过字符串

时间:2011-04-22 17:33:04

标签: regex vim string

我正在尝试将所有文​​本中的所有文本更改为6个字符,然后更改为6个字符~1 p.e。

c:\ program files \ vim directory \ vim73 \ to
C:\ PROGRA〜1 \ vimdir〜1 \ vim73

我找到了一种方法来找到“\ \”之间的字符串长度 strlen(matchstr(“c:\ program files \ vim directory \ vim73 \”,“\\\ zs。* \ ze \\”))

但我怎样才能循环一个字符串?

如何将其剪切为6个字符(如果存在则删除空格)并在其后面加上“~1”?

2 个答案:

答案 0 :(得分:1)

我认为这个正则表达式可以解决这个问题:

:%s /\\\([^\\]\{6\}\)[^\\]*/\\\1\~1\\/g

它实质上意味着:匹配\的两个出现或\的一个出现和换行符之间的前6个字符。请记住这些字符(\( ... \)用于记住)并匹配其他所有字符,直到分隔符(换行符或\)。用前6个字符替换~1

答案 1 :(得分:1)

这似乎适用于您的示例文本,但我不确定它是否适用于所有情况(假设您的文件名在其自己的行上,您可以将其修改为更具体,否则):

:s# ##ge|s#\v\\\zs(\w{6}).{-}\ze\\#\1\~1#&

编辑:注意到这会留下一个斜杠。如果你想要删除它,你可以使用以下代码:

:s# ##ge|s#\v\\\zs(\w{6}).{-}\ze\\#\1\~1#&|s#\\$##&