使用Vim替换方法时出错

时间:2014-06-20 14:02:12

标签: vim

我使用substitute()方法编写Vim脚本,以便代码折叠看起来不同。

~/.vimrc中的代码如下:

function! FoldText()
  let width = winwidth(0) - &foldcolumn - (&number ? 4 : 0)
  let first_line = getline(v:foldstart) . " ..."
  let edited_line = subsitute(first_line, "{ \.\.\.", "{ ... }", "")
  let expansion_string = repeat(" ", width)
  return edited_line . expansion_string
endfunction
set foldtext=FoldText()

问题在于这不起作用,我只是为每个折叠得到这个:

0-------------------------------------------------------------------------------

如果我取出edited_line并返回first_line . expansion_text,则第一部分有效:

class Whatever { ...

但是出于纯粹的美学原因,我喜欢以支架开头的折叠来显示支架,如下所示:

class Whatever { ... }

我没有太多地使用过VimScript,这主要是从this site收集的,所以我希望我遗漏了一些基本的东西。谢谢!

2 个答案:

答案 0 :(得分:3)

.表示“任何角色”。您必须将其转义以匹配实际的.

let edited_line = substitute(first_line, "{ \.\.\.", "{ ... }", "")

请注意,您可以使用以下内容来避免替换:

return getline(v:foldstart) . " ... }" . repeat(" ", width)

答案 1 :(得分:3)

0来自您的函数名称中的拼写错误。当Vim评估'foldtext'函数时,它显然会抑制错误(这会压倒编辑器),因此未定义函数subsitute()将返回默认值0

此外,(虽然它不会对此造成伤害),但您应该转义 模式中的.,因为它指定了常规表达,而不是文字;要么单独逃避它们({ \.\.\.),要么切换到非常无害

let edited_line = substitute(first_line, "\V{ ...", "{ ... }", "")