如何整理我的vimrc文件?

3

我的Vim配置文件越来越大了(15 KB+)。为了避免在启动时加载更多的文件而使Vim变慢,我尽量不引入更多的插件和文件。出于同样的目的,我只使用必要的插件,并尽可能减少插件数量。

因此,在我的.vimrc文件中,我有以下这些行:

autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4
autocmd FileType python setlocal textwidth=78
autocmd FileType python match ErrorMsg '\%>80v.\+'
autocmd FileType python inoremap <F5> <esc>:upd\|!python %<cr>
autocmd FileType python nnoremap <F5> :upd\|!python %<cr>
autocmd FileType python nnoremap <leader>8 :w\|call Flake8()<cr>
autocmd FileType python setlocal formatoptions-=t
autocmd BufWritePost *.py call Flake8()

现在我看到前7行,所有行都共同有autocmd FileType python这句话。所以我的想法是,如果我们设法将所有这些单词替换为更短的内容,那么Vim启动的速度就会更快。但我不知道该怎么做。

我们能否将它们分组?如何分组?还有其他的方法吗?


强制要求恶意评论::%d 是清理您的vimrc文件的最佳方法。或者,:new|saveas! $MYVIMRC 也是相当有效的。 - sehe
1
此外,稍微少一些恶作剧,:help autocmd-groups - sehe
4个回答

5

只需放置

setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=78 formatoptions-=t
match ErrorMsg '\%>80v.\+'
inoremap <F5> <esc>:upd\|!python %<cr>
nnoremap <F5> :upd\|!python %<cr>
nnoremap <leader>8 :w\|call Flake8()<cr>

~/.vim/after/ftplugin/python.vim 中。

Vim 只有在打开 Python 文件时才会读取这个文件。

实际上,我一直想做这件事,并且出于同样的原因。


4
这会覆盖默认的 ftplugin/python.vim,但仅在没有使用 :let b:did_ftplugin = 1 的情况下才能正常工作(即不会阻止默认设置)。我认为将其放在 ~/.vim/after/ftplugin/python.vim 中更清晰明了;这就是 after 目录的作用。 - Ingo Karkat
@IngoKarkat,你是对的。我已经用“/after”更新了我的答案。谢谢。 - romainl

4

文件类型相关的内容应该移到~/.vim/after/ftplugin/{filetype}.vim,如romainl所指出的。

我将所有自定义映射和命令移动到~/.vim/plugin/my{mappings,commands}.vim中,并且大多数只将真正的设置(:set命令)和插件定制放入.vimrc。任何不是简单一行代码并委托给函数的映射/命令都使用autoload机制。这使得启动时读取的内容量很小。

简而言之:Autoload非常棒;所有插件都应该使用它。


2

我正在使用一种方案,其中一组选项在由自动命令调用的函数中设置。

function! s:C_options()
    setlocal cinoptions={0,:1s,g1s,t0,(0,=.5s
    setlocal noautoindent
    setlocal nosmartindent
    setlocal cindent
    call s:PROG_options()
endfunction

autocmd BufRead,BufNewFile *.c call s:C_options()

这与使用文件类型非常相似,但您可以使用嵌套调用,例如在s:PROG_options()中具有通用编程选项,因此您应该能够进一步减小.vimrc的大小。

after\filetype解决方案可能更有效率,但我宁愿将大部分自定义内容放在单个.vimrc中,而不是散布在.vim目录中。


1

至少你可以将第一行和第二行与第七行合并

autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=78 formatoptions-=t
autocmd FileType python match ErrorMsg '\%>80v.\+'
autocmd FileType python inoremap <F5> <esc>:upd\|!python %<cr>
autocmd FileType python nnoremap <F5> :upd\|!python %<cr>
autocmd FileType python nnoremap <leader>8 :w\|call Flake8()<cr>
autocmd BufWritePost *.py call Flake8()

但我无法想象你如何摆脱其他人。另一方面,我认为这些autocmd命令执行起来并不需要太长时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接