如何在 vim indentexpr 中使用 execut

How to use execut in vim indentexpr

我尝试在 vim indentexpr 中使用 execut 代码

function! AddSpace(lnum,str)
    while len(getline(a:lnum)) < 80
        execut a:lnum . "," . a:lnum . "s/".a:str."/ ".a:str
    endwhile
endfunction

function! GetIndent()
    if getline(v:lnum) =~ ';'
        call AddSpace(v:lnum,";")
    endif     
    ...
    return ...
endfunction

setlocal indentexpr=GetIndent()

和 gg=G.It 不起作用... Vim 只是陷入死循环... 但是,其他缩进规则在循环之前有效。

但我称它为

call AddSpace(3,";")

它工作正常。

也许 "execut" 在 indentexpr 中不起作用?

还有什么方法可以将space插入到"execut"的文件中吗? 或者有没有更好的方法可以在不移动光标的情况下完成插入?

感谢您的帮助!

'indentexpr'并不意味着直接修改文本。事实上,明确禁止在计算表达式时修改文本。默认情况下会抑制错误消息,因此您不会收到任何错误指示,但表达式会在遇到文本修改时停止。

您的 AddSpace 函数应该 return 要添加的空格数,而不是实际添加的空格。请注意,您不需要 while 循环,只需使用减法即可找到所需的空格数。

详情见:help 'indentexpr'