2011-07-29 24 views
1

我有這個問題很多次: 我有一個源代碼,但如果我複製/粘貼到Wordpress和與<code></code>括起來開始空間是「壓縮「合而爲一。Vim的正規表達式的幫助:改變空格「 」

因此,我想知道如何我可以通過&nbsp;在行首開始時更改所有空格只有

I.e.

extend: 'Ext.panel.Panel', 

成爲

&nbsp;&nbsp;&nbsp;&nbsp;extend: 'Ext.panel.Panel', 
+0

使用

...
代替... emnoor

回答

2

我建議以下三種解決方案以滿足那些 中的順序列出的問題我個人喜好。

  1. 使用前面的原子匹配語法進行替換(請參見:help \@<=)。

    :%s/\%(^ *\)\@<= /\&nbsp;/g 
    

    如果命令的簡潔是至關重要的,人們可以使用「非常 魔術」模式(參見:help \v)和改變捕獲組(:help \%()非捕獲縮短。

    只是前導空格分割後的線路
    :%s/\v(^ *)@<= /\&nbsp;/g 
    
  2. 兩級替代, 代替這些空間,並重新加入該行。

    :g/^/s/^ \+/&\r/|-s/ /\&nbsp;/g|j! 
    
  3. 另一個兩步取代,取代每個前導空格 由某個符號不文本發生的,並且改變該 符號&nbsp;

    :exe"g/^ \\+/norm!v//e\rr\r"|%s/\r/\&nbsp;/g 
    
+0

非常感謝你們所有人的回答,這非常有用。我會花一些時間閱讀vim的幫助。時間,時間,時間! –

4
:%s/^ \+/\=repeat("&nbsp;",strlen(submatch(0))) 

但是,如果有一個較短的替代命令它不會讓我感到吃驚。來吧Vimgolfers!

+0

您的解決方案是更好! –

+0

這是最全面的解決方案(對我來說),我已經檢查了ib的答案,因爲有用的幫助提示。再次感謝您回答如此迅速。 –

2

使用向後看斷言在一行的開頭以取代只有空格precedeed空間:

%s/\(^ *\)\@<= /\&nbsp;/g 
+0

呵呵,這是思考過程的有趣巧合!我沒有注意到你的答案,並提出了幾乎相同的解決方案。順便說一下,沒有必要使用捕獲組,'\('。 –

+0

它確實使它變得更短,但是。:) –

+0

好吧,我可以使模式更短:':%s/\ v(^*)@<=/\  /g' :-) –