VIM:从当前目录/项目中读取“变量”

时间:2018-10-16 13:08:03

标签: vim pylint flake8

所以在我的.vimrc文件中,我有以下内容:

let g:syntastic_python_pylint_post_args="--max-line-length=80"

我想要类似的东西

let g:syntastic_python_pylint_post_args="$(cat .line_length.txt)"

而且我希望这个cat命令在我打开vim时运行。

例如,如果我在项目中有文件

myproject/.line_length.txt

例如,.line_length.txt的内容为120,我运行

vim

在该目录中,它应该读取该文件并将文件内容设置为变量。

...

这有可能吗?

我尝试使用项目特定的.vimrc文件,但似乎无法读取

let g:syntastic_python_pylint_post_args="--max-line-length=120"

尽管它将读取set ...行,但不会读取let g: ...行。

1 个答案:

答案 0 :(得分:3)

您尝试的$(...)语法的字面翻译如下:

let g:syntastic_python_pylint_post_args = substitute(system('cat .line_length.txt'), '\n\+$', '', '')

但是实际上不需要为此运行外部命令。 Vim具有底层:help readfile()功能:

let g:syntastic_python_pylint_post_args = readfile('.line_length.txt')[0]

注意事项

  • 根据启动Vim的位置,该配置可能不存在。您需要对此加以考虑,可能使用filereadable()作为条件,或者只是忽略:silent!的任何错误。
  • 某些插件仅在启动期间读取其配置变量,此后将忽略对其的任何更改。这样可以使您的计划在~/.vimrc中运行,但可能会影响您在运行时“重新加载”另一个项目的能力(请参见下文)。

刷新本地配置

您的解决方案取决于Vim在“项目目录”中启动。您还提到了特定于项目的vimrc作为替代方案。这是一些选择:

中央配置

如果可以集中配置特定的命令/本地异常,则可以将此类autocmd放入~/.vimrc

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4

使用:setlocal代替:set,同样使用:map <buffer> ...:command! -buffer ...很重要。

另一方面,如果您希望将特定配置与项目一起存储(并且不想通过 modelines 将其嵌入所有文件中),则可以使用以下两个选项:

具有内置功能的本地配置

如果您总是从项目根目录启动Vim,则内置

:set exrc

启用从当前目录读取.vimrc文件的功能。您可以在其中放置:set ts=4 sw=4命令。

通过插件进行本地配置

否则,您需要插件的帮助; vim.org上有几个;我可以推荐localrc plugin(尤其是my own enhancements),它甚至允许本地文件类型特定的配置。

请注意,从文件系统读取配置具有安全隐患。您可能要:set secure