用Vim中的空格替换换行符

时间:2014-01-03 23:41:36

标签: regex vim

我正在编写一个函数来缩进Vim中字符串中的所有行。我正在尝试使用substitute替换n个空格的所有行首:

function! Indent(str, n)
  return substitute(a:str, '\v^', repeat(' ', a:n), 'g')
endfunction

尽管我使用了g标志,但这只会缩进第一行。我也尝试使用\v\_^,结果相同。

Indent("To be or not to be\nThat is the question", 2)

# => "  To be or not to be\n  That is the question"  (DESIRED OUTPUT)
# => "  To be or not to be\nThat is the question"    (ACTUAL OUTPUT)

如何修改我的正则表达式以获得所需的输出?

2 个答案:

答案 0 :(得分:1)

您可以通过拆分和加入来轻松完成此操作。

function! Indent(str, n)
    let l:sep = repeat(' ', a:n)
    return l:sep . join(split(a:str, "\n"), "\n".l:sep) 
endfunction

答案 1 :(得分:1)

这应该做:

substitute(a:str,'\n\|^','&'.repeat(' ', a:n) ,'g')