在vimrc中,仅对某些文件类型应用某些突出显示规则

时间:2018-11-29 12:00:25

标签: vim file-type

在我的vimrc中,我有一个脚本,当在* *双星*之间绑定时,它会以粗体转换文本(实际上就像在此编辑器中一样),但是我不希望它应用于我的js或c或任何编程文件,当然,所以我试图使其仅在.txt文件时运行:

if (&filetype=='text')
    set concealcursor=n
    set conceallevel=3
    hi AsteriskBold ctermfg=Green cterm=bold
    autocmd BufEnter * syn match Asterisks contained "**" conceal
    autocmd BufEnter * syn match AsteriskBold "\*\*.*\*\*" contains=Asterisks
endif

但是显然“ if”的条件不起作用,因为该规则不再适用于我的文件,文本或其他内容

编辑=>解决方案

在阅读答案后,我在vimrc中选择了此解决方案(即使这不是ingo所解释的vim最佳工作方式)

au BufEnter *.txt setf text "(set a filetype unless it already exist)
au filetype text set cocu=n cole=3
au filetype text hi AsteriskBold ctermfg=Green cterm=bold
au filetype text syn match Asterisks contained "**" conceal
au filetype text syn match AsteriskBold "\*\*.*\*\*" contains=Asterisks

2 个答案:

答案 0 :(得分:4)

文件类型

特定于文件类型的设置进入~/.vim/after/ftplugin/text.vim。 (这要求您具有:filetype plugin on;使用 after 目录允许您覆盖$VIMRUNTIME/ftplugin/text.vim完成的任何默认文件类型设置。)或者,您可以定义{{1 }}直接放在您的:autocmd FileType text ...中,但是一旦您进行了许多自定义,这就会变得很笨拙。

语法

对于~/.vimrc命令,有一个相应的目录:syntax。 (Vim当前未附带专用的~/.vim/after/syntax/text.vim语法;您可以删除text部分,并将其作为主要语法。)

根据语法脚本约定,您的语法组应以文件类型为前缀;例如aftertextAsterisks组也必须重命名;但是,语法脚本通常使用:hi将语法组链接到(更通用的)突出显示组::hi def linkusr_44.txt末尾有更多信息。

突出显示组

这些是全局的,您可以将hi def link textAsteriskBold AsteriskBold命令直接放入:hi中,并只定义一次。

隐藏

隐藏设置是 window-local ,但是文件类型和语法适用于 buffers 。通过使用~/.vimrc(而不是:set),这些设置将被从显示文本文件的窗口打开的任何新窗口继承。根据您的工作流程(以及您编辑的其他文件类型是否全部使用隐藏),您可能永远不会注意到这一点,并且没有很好的解决方法(只有一大堆:setlocal才能尝试适应这些问题)。请注意这一点。

答案 1 :(得分:2)

您正在寻找augroup

请参见:help augroup:help filetype

例如:

augroup asteriskbold
    au!
    au BufNewFile,BufRead *.txt,*.md,*.mkd,*.markdown,*.mdwn set concealcursor=n conceallevel=3
    au BufNewFile,BufRead *.txt,*.md,*.mkd,*.markdown,*.mdwn hi AsteriskBold ctermfg=Green cterm=bold
    au BufNewFile,BufRead *.txt,*.md,*.mkd,*.markdown,*.mdwn syn match Asterisks contained "**" conceal
    au BufNewFile,BufRead *.txt,*.md,*.mkd,*.markdown,*.mdwn syn match AsteriskBold "\*\*.*\*\*" contains=Asterisks
augroup end