我的vimrc文件中有这些行:
set concealcursor=n
set conceallevel=3
hi AsteriskBold ctermfg=Green cterm=bold
syn match Asterisks contained "**" conceal
syn match AsteriskBold "\*\*[^*]\+\*\*" contains=Asterisks
如果我在vim中打开一个新文件,它们会适用,但是如果我打开一个已经存在的文件,它在我运行之前就不起作用了:source~ / .vimrc
然而其他设置也适用,我不需要提供它们:
set directory=~/.vim/swapfiles//
colo torte
set tabstop=2
set autoindent
set number
我不明白为什么?我想它们会被其他vim设置覆盖,但如果它是新文件则不会,我不知道如何找到覆盖它们的设置在哪里?
例如,如果我运行
touch test.txt
echo hello > test.txt
echo \*\*world\*\* >> test.txt
vim test.txt
我获得了
1你好
2 * * world * *
〜
〜
〜
现在,如果我运行:verbose set conceallevel
,则输出conceallevel=3
last modification in ~/.vimrc
如果我运行:source ~/.vimrc
我获得
1你好
2 世界
〜
〜
〜
如果我再次运行:verbose set conceallevel
,它仍会输出conceallevel=3
last modification in ~/.vimrc
所有这些都是在.txt文件上完成的,但如果我尝试使用.js文件,它的工作方式完全相同。但是,我的设置似乎不适用于.html文件,但我不在乎
答案 0 :(得分:1)
最终有效的是:
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
因为如果我写autocmd ColorScheme * hi AsteriskBold ctermfg=Green cterm=bold
,那么在获取文件后它就不起作用;不知道为什么......
答案 1 :(得分:0)
您的配色方案很可能会清除您的突出显示组AsteriskBold
(确认输入命令:hi AsterisksBold
)。例如,从default
配色方案的前几行(位于:e $VIMRUNTIME/color/default.vim
):
" Remove all existing highlighting and set the defaults.
hi clear
这将清除现有的突出显示组,包括AsteriskBold
。可能的解决方案是使用自动命令触发突出显示设置:
autocmd ColorScheme * hi AsteriskBold ctermfg=Green cterm=bold
autocmd BufEnter * syn match Asterisks contained "**" conceal
autocmd BufEnter * syn match AsteriskBold "\*\*[^*]\+\*\*" contains=Asterisks