我使用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收集的,所以我希望我遗漏了一些基本的东西。谢谢!
答案 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{ ...", "{ ... }", "")