我正在使用AppendModeline函数为我的vim文件添加一个模式行:
" Append modeline after last line in buffer. " Use substitute() instead of printf() to handle '%%s' modeline in LaTeX " files. function! AppendModeline() let l:modeline = printf(" vim: set ts=%d sw=%d tw=%d :", \ &tabstop, &shiftwidth, &textwidth) let l:modeline = substitute(&commentstring, "%s", l:modeline, "") call append(line("$"), l:modeline) endfunction
但我想扩展它。它应支持添加 expandtab 的当前值
使用& expandtab ,我可以获得当前值的数字表示。但是vim不支持 set et = 0 之类的东西。必须设置[no] expandtab
我是否真的必须测试& expandtab 并将 expandtab 或 noexpandtab 附加到 l:modeline 或者是否存在获取当前值的字符串表示的方法?
设置expandtab?显示 [no] expandtab ,但我不知道如何在脚本中使用它(或者如果可能的话)。
答案 0 :(得分:4)
是的,你必须这样做。使用:redir
可以捕获输出,但基于:redir
的解决方案至少有四行,正则表达式可以获取值。使用&et
更清晰:
… printf("… %set …", …, &expandtab ? '' : 'no', …)
注意:%set
为%s
后跟et
(expandtab
的缩写)。这里的set
字只是一个意外。