在我的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
答案 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
部分,并将其作为主要语法。)
根据语法脚本约定,您的语法组应以文件类型为前缀;例如after
。 textAsterisks
组也必须重命名;但是,语法脚本通常使用:hi
将语法组链接到(更通用的)突出显示组::hi def link
。 usr_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