vimrc 设置不在开始时应用,但仅在采购后应用
vimrc settings apply not at start but only after sourcing
我的 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 ~/.vim 之前不起作用rc
但是其他设置也适用,我不必获取它们:
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 hello
2 * * world * *
~
~
~
现在如果我 运行 :verbose set conceallevel
它输出 conceallevel=3
last modification in ~/.vimrc
如果那我运行:source ~/.vimrc
我得到
1 hello
2 world
~
~
~
如果我再次 运行 :verbose set conceallevel
它仍然输出 conceallevel=3
last modification in ~/.vimrc
所有这些都是在 .txt 文件上完成的,但如果我在 .js 文件上尝试,它的工作原理完全相同。但是,我的设置似乎不适用于 .html 文件,但我不在乎
很可能您的高亮组 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
最后起作用的是:
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
它在获取文件后不起作用;不知道为什么...
我的 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 ~/.vim 之前不起作用rc
但是其他设置也适用,我不必获取它们:
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 hello
2 * * world * *
~
~
~
现在如果我 运行 :verbose set conceallevel
它输出 conceallevel=3
last modification in ~/.vimrc
如果那我运行:source ~/.vimrc
我得到
1 hello
2 world
~
~
~
如果我再次 运行 :verbose set conceallevel
它仍然输出 conceallevel=3
last modification in ~/.vimrc
所有这些都是在 .txt 文件上完成的,但如果我在 .js 文件上尝试,它的工作原理完全相同。但是,我的设置似乎不适用于 .html 文件,但我不在乎
很可能您的高亮组 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
最后起作用的是:
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
它在获取文件后不起作用;不知道为什么...