全局变量的缓冲局部值?

时间:2014-08-11 02:11:51

标签: vim

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

我知道有一种方法可以通过使用条件(Setting buffer specific variables in Vim)来智取。但并非所有这些autocmd都在我的控制之下,因为有些是由其他插件设置的。是否有类似于全局变量的setlocal?

2 个答案:

答案 0 :(得分:3)

有很多方法可以实现你真正想要的东西(为一些项目去掉尾随空格),但是我认为无论如何都没有使用缓冲区本地变量来影响全局变量(这就是你所问的)。 / p>

执行此操作的一种方法是添加

autocmd BufWritePre /path/to/project/* call StripTrailingWhitespace()

以下内容到你的vimrc。对StripTrailingWhitespace下的任何文件(包括子目录)调用函数/path/to/projectStripTailingWhitespace在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>