vim - 全局变量的缓冲区局部值?

标签 vim

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

我知道有一种方法可以通过使用条件 (Setting buffer specific variables in 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 配置中的所有内容。

关于vim - 全局变量的缓冲区局部值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235000/

相关文章:

regex - 在 Vim 中,如何匹配 "="而不是 "=="?

regex - 如何找到文件中的特定行,然后使用 vi/vim 编辑器从这些行中替换一个词,保持其他一切完好无损

html - 如何强制 vim 将文件语法高亮显示为 html?

vim - 在vim中显示函数参数

vim auto-pairs remove/umwrap pair of brackets

vim 快捷方式用表达式替换光标下的字符?

regex - vi 序列号生成

vim 文本宽度重新格式化

Vimscript : how pass variable/float into string?

vim - 学习Vim : Best way to remove space between words