簡體   English   中英

如何在 Vim 中用“ ”替換前導空格(僅)?

[英]How to replace leading spaces (only) with “ ” in Vim?

我多次遇到這個問題:我有一段源代碼,但是如果我將其復制並粘貼到 Wordpress 中並用<code>...</code>標簽將其括起來,則開頭的空格會被“壓縮”成一。

因此,我想知道如何通過&nbsp;在行首更改所有空格&nbsp; ,例如,

    extend: 'Ext.panel.Panel',

變成

&nbsp;&nbsp;&nbsp;&nbsp;extend: 'Ext.panel.Panel',
:%s/^ \+/\=repeat("&nbsp;",strlen(submatch(0)))

但如果有一個更短的替代命令,我不會感到驚訝。 來吧 Vimgolfers!

使用后視斷言替換一行開頭的空格:

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

有三種方法可以實現我可以看到的所需編輯,下面按我個人喜好的順序列出。

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM