如何在 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'
。
我尝试在 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'
。