2011-04-22 90 views
1

我想在一个url中更改所有文本长度然后6个字符到6个字符〜1 p.e.VIM:通过字符串循环

C:\ Program Files文件\ vim的目录\ vim73 \到
C:\ PROGRA〜1 \ vimdir〜1 \ vim73

我已经找到一种方法之间找到字符串的长度 “\ \”
我怎样才能通过一个字符串循环?我想我可以通过一个字符串循环吗?

我该如何将它切成6个字符(如果有空格,请删除空格)并将“〜1”放在后面?

回答

1

这似乎为您的示例文本工作,但我不知道它会在所有情况下(假设你的文件名是在它自己的路线,你可以修改它更具体说明):

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

编辑:只是注意到,这留下了一个斜线。如果你想删除太多,你可以使用以下代替:

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

我忘了写我必须把这段代码的输出放在一个变量中(在一个vimscript中)。我怎样才能做到这一点? – Reman 2011-04-22 19:01:55

+0

使用'substitute()'函数代替':substitute'命令。有关更多信息,请参阅':help substitute()'。 – 2011-04-22 19:11:23

+0

不知道如何把你的命令放在替代命令中。我试过这个,但它不起作用:'substitute(m,“/ // ge | s/\ v \\\ zs(\ w {6})。{ - } \ ze \\”,“\ 1 \ 〜1 /&| s/\\ $ //&“,”g“)'---> m =我的字符串 – Reman 2011-04-22 19:43:29

1

我觉得这个正则表达式应该做的伎俩:

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

它本质上表示:匹配的\ 2个出现次数或\和换行符一个ocurrence之间的前6个字符。记住这些字符(\(... \)用于记忆)并匹配其他所有内容,直到分隔符(换行符或\)。用前6个字符和~1替代。

+0

这不会删除空格,并留下额外的'\\'s,我相信。 – 2011-04-22 17:50:15

+0

@ randy-morris:对,我错过了这个例子,包括删除空格。再额外'\':那应该不会伤害我想。也许我错了? – evnu 2011-04-22 17:53:36

+0

我想这取决于转换后的用途。 – 2011-04-22 17:56:26