繁体   English   中英

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

[英]in vimrc apply certain highlighting rules only for certain filetype

在我的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

文件类型

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

语法

对于:syntax命令,有一个对应的目录~/.vim/after/syntax/text.vim (Vim目前并不用专用船舶text语法,你可以放下after部分,让你的语法主要原因之一。)

按照语法脚本约定,您的语法组应以文件类型为前缀; 例如textAsterisks :hi组也必须重命名; 但是,语法脚本通常使用:hi def link将语法组:hi def link到(更通用的)突出显示组: hi def link textAsteriskBold AsteriskBold 有关更多信息,请usr_44.txt

高亮组

这些是全局的,您可以将:hi命令直接放入~/.vimrc并仅定义一次。

隐藏

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

您正在寻找一个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM