如何在vimscript substitiute函数中插入新行

时间:2014-12-01 20:00:24

标签: function newline vim substitution

我想要这句话:

My, sentence.

是这样的:

My,
sentence.

我的功能是:

function! ParseLine()
   let line = getline(".")
   echom line 
   let parsedLine  = substitute(line, ",", "\v\\v\\0\\r\r\\n\r\\<cr>\<cr><cr>\\^M\r&\^@\\^@", "g")
   call setline(".", parsedLine)
endfunction

运行此功能时得到的结果:

Myvv,^M^M^@^M<cr>^M<cr>^M^M,^@^@ sentence.

2 个答案:

答案 0 :(得分:3)

最简单的方法:

function! ParseLine()
   exec 's/,\s*/,\r/g'
endfunction

或者,如果您想先拨打substitute(),请“设置”该行:

function! ParseLine()
   let parsedLine  = substitute(getline('.'), ',\s*', ',\n', "g")
   let o = @o
   let @o = parsedLine
   normal! V"op
   let @o=o
endfunction

答案 1 :(得分:2)

您尝试这样做的方式永远不会起作用,因为您无法在setline函数中使用换行符。

如果您尝试在包含换行符的字符串上使用setline,则会收到错误消息。但是,您可以使用execute "normal! ..."命令执行此操作:

function! ParseLine()
    execute "normal! 0f,a\n"
endfunction

应找到,并在其后插入换行符,为您提供所需的结果。

请注意,您必须使用execute "normal! ..."而不是normal! ...,因为普通人不会理解\n是一个特殊字符,您会得到:

My,\n Sentence