许多Vim的插件设置都是通过让g:something = value来指定的。我需要设置一些变量的缓冲区本地值(实际上是使用vim-localvimrc)
我知道有一种方法可以通过使用条件(Setting buffer specific variables in Vim)来智取。但并非所有这些autocmd都在我的控制之下,因为有些是由其他插件设置的。是否有类似于全局变量的setlocal?
答案 0 :(得分:3)
有很多方法可以实现你真正想要的东西(为一些项目去掉尾随空格),但是我认为无论如何都没有使用缓冲区本地变量来影响全局变量(这就是你所问的)。 / p>
执行此操作的一种方法是添加
autocmd BufWritePre /path/to/project/* call StripTrailingWhitespace()
以下内容到你的vimrc。对StripTrailingWhitespace
下的任何文件(包括子目录)调用函数/path/to/project
。 StripTailingWhitespace
在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配置中的所有内容。
答案 1 :(得分:1)
在您的情况下,您使用的插件应接受使用缓冲区局部变量覆盖全局变量。确实可以通过改变条件来完成 - 在lh-vim-lib中有一个lh#option#get()函数,它很容易适应spf13。如果您认为有意义,请联系spf13维护者或在项目错误跟踪器中打开一个问题。
另一种解决方案将依赖于为您正在处理的每个项目定义local_vimrc脚本。在某些项目中,您将拥有:let g:spf13_keep_trailing_whitespace = 1
,在其他项目中,您将拥有:silent! unlet g:spf13_keep_trailing_whitespace
- 通常使用:let g:var=0
完成,但当前条件会忽略变量值。< / p>