【发布时间】:2021-11-13 06:20:40
【问题描述】:
如果我能在我的 vimrc 中调整一些模块化 vim 文件类型的代码,我将不胜感激。提前谢谢您。
我的 vim --version 是 8.1。
我提取了以下模块化代码的最小示例。这是我写它时的想法:
- 我有一个函数,LoadAllKeywords(),其中定义了 N 个关键字列表(通过 syn 关键字)。
- 对于 M 种不同的文件类型(*.py、*.c、...)中的每一种,我都有 1 个函数。这些 M 文件类型特定函数中的每一个都将通过调用 LoadAllKeywords() 加载所有关键字列表,然后选择这些列表的子集来执行突出显示。这使我可以将所有关键字存储在代码中的一个位置,同时让突出显示规则因英尺而异。
- 模块化是以瞬时加载为代价的。加载时间似乎随着事件的数量呈指数增长。事件包括加载缓冲区(即 BufEnter)和通过常规旧缓冲区切换 (c-w c-h) 访问缓冲区。
代码如下,以及我通过 this SO post发现的函数分析器输出(:profile {})的摘录。
设置N个关键字列表的函数定义
fun! LoadAllKeywords()
syn keyword msgsHL containedin=.*Comment msgs flash tick
syn keyword mvpHL containedin=.*Comment works_ dbugd_ depr_ collab_ delta_ aka_ restrict_ cisc_
syn keyword pipeHL containedin=.*Comment step_
syn keyword warnHL containedin=.*Comment warning_ gotcha_ sidefx_ improvement_ rbugd_ rename_ seq_
syn keyword RecipeHL containedin=.*Comment TITLE STEP
syn keyword ToyHL containedin=.*Comment src_ play_ risc_ overview_ idea_ mathidea_ csidea_ syntax_ question_
syn keyword ContentHL IMAGE BLOOM PIPE ALGO GRID RE IXO SIMPLE DELTA
syn keyword StructureHL MVFR MVTO TOC RISC CISC TODO BKMK GOTO
endfu
用于特定文件类型突出显示的 M 函数子集。
...
fun! PythonHighlights()
call LoadAllKeywords() "load keywords to pick and choose from
hi msgsHL ctermfg=Blue ctermbg=None cterm=None
hi mvpHL ctermfg=DarkGreen ctermbg=None cterm=None
hi pipeHL ctermfg=Grey ctermbg=None cterm=bold
hi warnHL ctermfg=Yellow ctermbg=None cterm=None
endfu
fun! NotesHighlights()
call LoadAllKeywords() "load keywords to pick and choose from
hi ContentHL ctermfg=LightGrey ctermbg=None cterm=bold
hi StructureHL ctermfg=Blue ctermbg=None cterm=None
endfu
...
函数从 .vim/ftplugin/* 中的相应文件类型调用。
augroup python_autogroup "in ftplugin/python.vim
au!
autocmd BufEnter *.py call PythonHighlights() "moving this to _python.vim, where it will be called.If the function isn't defined, move _aesthetics to run before _python, _notes, and other filetypes.
augroup END
call NotesHighlights() "in ftplugin/notes.vim
autocmd BufEnter *.c call CLikeHighlights()
autocmd BufEnter *.h call CLikeHighlights()
这是分析器,只分析 1 个 .c 文件的打开。在打开大约 8-10 个文件后开始进行分析,以显着降低速度。您可以在这里找到排在前 3 位的可疑函数。
FUNCTIONS SORTED ON TOTAL TIME
count total (s) self (s) function
1 1.599449 0.000926 <SNR>62_NetrwBrowseChgDir()
98 1.130717 0.001972 CLikeHighlights()
98 1.128745 LoadAllKeywords()
102 0.200728 0.041670 <SNR>4_SynSet()
102 0.105099 0.076247 <SNR>22_LoadFTPlugin()
1 0.045744 0.001851 netrw#Explore()
2 0.043202 0.000217 netrw#LocalBrowseCheck()
1 0.042797 0.001287 <SNR>62_NetrwBrowse()
1 0.035903 0.000969 <SNR>62_PerformListing()
102 0.019905 0.017667 <SNR>23_LoadIndent()
2 0.017507 0.001461 <SNR>62_NetrwSafeOptions()
4 0.010980 0.001338 fugitive#detect()
1 0.009971 0.000029 <SNR>28_record()
1 0.009942 0.000298 <SNR>28_addtomrufs()
1 0.009226 0.000012 <SNR>28_savetofile()
1 0.009214 0.009204 ctrlp#utils#writecache()
1 0.008837 0.008824 <SNR>29_persist()
1 0.008067 0.004857 <SNR>62_LocalListing()
17 0.005025 <SNR>38_Highlight_Matching_Pair()
1 0.004706 0.000034 dist#ft#FTheader()
FUNCTIONS SORTED ON SELF TIME
count total (s) self (s) function
98 1.128745 LoadAllKeywords()
102 0.105099 0.076247 <SNR>22_LoadFTPlugin()
102 0.200728 0.041670 <SNR>4_SynSet()
102 0.019905 0.017667 <SNR>23_LoadIndent()
1 0.009214 0.009204 ctrlp#utils#writecache()
1 0.008837 0.008824 <SNR>29_persist()
17 0.005025 <SNR>38_Highlight_Matching_Pair()
1 0.008067 0.004857 <SNR>62_LocalListing()
1 0.002979 0.002905 <SNR>62_NetrwMaps()
4 0.002700 <SNR>30_define_commands()
1 0.002611 <SNR>62_NetrwSetSort()
34 0.002496 <SNR>62_NetrwFile()
98 1.130717 0.001972 CLikeHighlights()
1 0.045744 0.001851 netrw#Explore()
8 0.001737 <SNR>30_map()
2 0.017507 0.001461 <SNR>62_NetrwSafeOptions()
3 0.001410 <SNR>31_setup_vinegar()
4 0.010980 0.001338 fugitive#detect()
2 0.001306 <SNR>62_NetrwOptionSave()
1 0.042797 0.001287 <SNR>62_NetrwBrowse()
【问题讨论】: