Vim正则表达式帮助:将空格更改为“”

时间:2011-07-29 21:53:43

标签: regex vim replace

我多次遇到过这个问题: 我有一个源代码,但是如果我将其复制/粘贴到Wordpress中并用<code> </code>将其括起来,则将起始空格“压缩”为一个。

因此,我想知道如何通过&nbsp;更改行开头的所有空格

    extend: 'Ext.panel.Panel',

变为

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

3 个答案:

答案 0 :(得分:4)

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

但如果有更短的替代命令,我不会感到惊讶。来吧Vimgolfers!

答案 1 :(得分:2)

使用后面的断言来替换前面只有空格的空格:

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

答案 2 :(得分: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