vim - 在 vimrc 中,仅对某些文件类型应用某些突出显示规则
问题描述
在我的 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
但显然“如果”的条件不起作用,因为此规则不再适用于我的任何文件,文本与否
编辑 => 解决方案
在阅读完答案后,我在我的 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 textAsteriskBold AsteriskBold
. 更多信息在末尾usr_44.txt
。
突出显示组
这些是全局的,您可以将:hi
命令直接放入您的命令中~/.vimrc
并只定义一次。
隐藏
隐藏设置是window-local,但文件类型和语法适用于buffers。并且通过使用:set
(而不是:setlocal
),这些设置将被从显示文本文件的窗口打开的任何新窗口继承。根据您的工作流程(以及您编辑的其他文件类型是否完全使用隐藏),您可能永远不会注意到这一点,并且没有好的解决方法(只有大量的混乱:autocmd
可以尝试调整这些)。请注意这一点。
推荐阅读
- exception - Exact Online Refresh-token Header 生成 Java Exception (Exact Online, OAuth)
- reactjs - 不知道如何在本机反应中调试这些错误
- java - 如何在 RecyclerView 中获取元素 ID
- python - 如果表单在我的基本模板文件中,如何实现表单提交?
- css - CSS:仅当内部 div 聚焦时页面才可滚动
- unity3d - 加载协作历史记录时出现 Unity ArgumentOutOfRangeException
- java - spring boot java调度程序应该每天只执行一次三个dyno
- sql - SQL:在类似于 FOR EACH 循环中使用查询结果。微软 SQL 短信
- elasticsearch - 尝试从主题创建索引时,Elasticsearch 接收器连接器抛出 403 禁止异常
- apache-kafka - 如何使用kafka集成在春季批处理中调用StepExecutionListener?