有没有办法在vim中获取布尔选项的字符串表示?

时间:2012-12-21 14:40:21

标签: vim options

我正在使用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 ,但我不知道如何在脚本中使用它(或者如果可能的话)。

1 个答案:

答案 0 :(得分:4)

是的,你必须这样做。使用:redir可以捕获输出,但基于:redir的解决方案至少有四行,正则表达式可以获取值。使用&et更清晰:

… printf("… %set …", …, &expandtab ? '' : 'no', …)

注意:%set%s后跟etexpandtab的缩写)。这里的set字只是一个意外。