Vim --应用本地vimrc文件

dfuffjeb  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(78)

我希望能够有一个文件与一些突出选择本地到当前目录,一般用于突出显示某些短语在日志文件中,因为我正在分析它。
我发现了这个:

if filereadable("_gvimrc")
    source _gvimrc
endif

字符串
在这个问题中:Vim:对目录中的文件应用设置
但是,当在文件之间切换时,比如“file1.log”和“file2.log”,高亮显示会被擦除,因为local _gvimrc并不是每次打开文件时都有源代码,只有当vim启动时才有源代码。
有没有一种方法可以在每次打开文件时重新加载本地命令文件?

6jygbczu

6jygbczu1#

正如链接答案的注解中所提到的,建议的命令存在许多问题。当您编辑另一个文件时,您的突出显示丢失,这一事实表明:a)您可能以一种次优的方式进行了突出显示,b)您也在错误的位置进行了突出显示。很难根据您提供的少量信息更具体地说明这一点。
通常,放入*vimrc文件中的命令在启动期间和全局范围内执行一次,这使得它不适合于本地的、特定于文件的命令,如:

match Foo 'foo\sbar'

字符串
你需要用一个自动命令来执行它,这样它才能真正地使用。

autocmd! BufRead *.log match SomeHighLightGroup 'foo\sbar'


现在,如果我想在/path/to/logs/下的所有*.log文件中,系统地用黄色突出显示短语foo bar,用蓝色突出显示短语baz quux,我会这样做:

  • syntax/mylogs.vim下创建一个特定的语法脚本,内容如下:
hi Yellow ctermbg=yellow ctermfg=black
hi Blue ctermbg=blue ctermfg=black
syn match Yellow 'foo\sbar'
syn match Blue 'baz\squux'


我...

  • 定义两个不同的突出显示组YellowBlue
  • 使用语法突出显示机制来匹配所需短语。

请参见:help syntax

  • 告诉Vim将mylogs语法分配给/path/to/logs/下的每个*.log文件:
" in my vimrc
augroup mylogs
    autocmd!
    autocmd BufRead,BufNewFile /path/to/logs/*.log set syntax=mylogs
augroup END


我...

  • 定义自清除自动命令组
  • 并使用一个简单自动命令来实现我们的目标。

参见:help :augroup:help :autocmd:help BufRead:help BufNewFile:help 'syntax',以及更一般地,:help new-filetype
这样做的净效果是,每次我在/path/to/logs/下编辑*.log时,我都可以毫不费力地以我想要的方式突出显示foo barbaz quux


的数据
如果我需要添加新短语,我只需向语法脚本中添加更多行:

hi Green ctermbg=green ctermfg=black
syn match Green 'patapouf'


最后,使用以下语句重新应用语法:

:set syntax=mylogs


或者简单地说:

:e


5ssjco0h

5ssjco0h2#

正如我在你所选择的方法的注解中所写的,“你一次只能做一个项目”。这正是你所观察到的:配置文件只在Vim启动时加载。
如果你真的不想为此使用插件,如果你没有目录层次结构,:h 'exrc'可能就足够了。
如果你不害怕用项目特定的自动命令来破坏你的.vimrc,还有Romain解决方案的第二部分--第一部分,也是非常聪明的部分,可以应用于任何方法(你可以在你的~/.vim/syntax/目录中定义语法文件,然后从local_vimrc/.exrc/.

相关问题