我尝试在代码
下使用vim indentexpr中的executfunction! 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.它不起作用...... Vim刚陷入死循环...... 但是,其他缩进规则在循环之前有效。
但是,我把它称为
call AddSpace(3,";")
工作正常。
也许“执行”不能在indentexpr中工作?
是否还有办法用“execut”将空格插入文件? 或者有没有更好的方法来完成插入而没有光标移动?
感谢您的帮助!
答案 0 :(得分:2)
'indentexpr'
并不意味着直接修改文本。实际上,在评估表达式时明确禁止修改文本。默认情况下会禁止显示错误消息,因此您无法获得错误指示,但表达式在遇到文本修改时才会停止。
您的AddSpace函数应该返回要添加的空格数,而不是实际添加空格。请注意,您不需要while循环,您只需使用减法来查找所需的空格数。
有关详细信息,请参阅:help 'indentexpr'
。