全局变量的缓冲区局部值



许多Vim插件的设置是由let g:something = value指定的。我需要设置一些变量的缓冲区本地值(实际上是使用vim-localvimrc)

我知道有一种方法可以通过使用条件(在Vim中设置缓冲区特定变量)来智胜。但并非所有这些自动命令都在我的控制之下,因为有些是由其他插件设置的。有没有setlocal之类的东西来表示全局变量?

有很多方法可以做到你真正想要的(对一些项目去除尾随空格),但我认为无论如何都不能用缓冲区局部变量来阴影全局变量(这就是你所要求的)。

一种方法是添加
autocmd BufWritePre /path/to/project/* call StripTrailingWhitespace()

将以下内容发送到您的vimrc。它将为/path/to/project下的任何文件(包括子目录)调用函数StripTrailingWhitespaceStripTailingWhitespace在spf13中定义

您可以通过查看本地vimrc文件的路径来动态地生成项目的路径。


另一种方法是改变spf13调用StripTrailingWhitespace

的条件

spf13中的StripTrailingWhitespace autocmd定义如下:(我添加了换行,所以我不确定这是否会工作。)

autocmd FileType c,cpp,java,go,php,javascript,python,twig,xml,yml,perl
   autocmd BufWritePre <buffer>
       if !exists('g:spf13_keep_trailing_whitespace') |
           call StripTrailingWhitespace() |
       endif

因此,您可以将其更改为!exists('g:spf13_keep_trailing_whitespace')以某些其他条件,例如检查是否在白名单项目或检查缓冲区局部变量。


一般的建议是放弃任何vim发行版。当你第一次开始的时候,很难理解其中的内容。然后就很难修改它们了。通常最好从头开始,并在发现不足之处添加插件和映射。这将花费更长的时间,但您将了解vim配置中的所有内容。

在你的例子中,你使用的插件应该接受用缓冲区局部变量覆盖全局变量。实际上,它可以通过改变条件来实现——在lh-vim-lib中有一个lh#option#get()函数,它可以很容易地适应spf13。如果您认为这样做有意义,请联系spf13的维护者或在项目bug跟踪器中打开一个问题。

另一个解决方案依赖于为您正在处理的每个项目定义一个local_vimrc脚本。在一些项目中,您将使用:let g:spf13_keep_trailing_whitespace = 1,在其他项目中,您将使用:silent! unlet g:spf13_keep_trailing_whitespace—通常使用:let g:var=0完成,但当前条件忽略变量值。

最新更新