2011-04-22 138 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