3

如何以.vimrc优雅的方式使用单个文件(没有 ftplugin)更改 Vim 行为?

我的意思是……如果我对 C/C++ 文件进行了许多赞扬,例如:

set nu
set cin
set ai
set mouse=a
color elflord

还有一堆对 AsciiDoc 文件的赞扬,例如:

set syntax=asciidoc
set nocin
set spell spl=en

更不用说 Python、LaTeX 等了。

提供了解决方案 https://stackoverflow.com/a/159065/544721 用于放置autocommand在每个自定义命令之前。

有没有一种很好的方法可以在autocommand不使用的情况下对它们进行分组ftplugin- 以便将所有内容保存在单个.vimrc文件中(更好地在多台机器上移动等)?相当于if带括号的声明的东西{}

4

2 回答 2

3

You can use the following:

if has("autocmd")
    augroup LISP
        au!
        au BufReadPost *.cl :set lisp
        au BufReadPost *.cl :set showmatch
        au BufReadPost *.cl :set cpoptions-=m
        au BufReadPost *.cl :set autoindent
    augroup END
    augroup C
        au!
        autocmd BufNewFile,BufRead *.cpp set formatprg=c:\\AStyle\\bin\\AStyle.exe\ -A4Sm0pHUk3s4
        autocmd BufNewFile,BufRead *.c set formatprg=c:\\AStyle\\bin\\AStyle.exe\ -A4Sm0pHUk3s4
        autocmd BufNewFile,BufRead *.h set formatprg=c:\\AStyle\\bin\\AStyle.exe\ -A4Sm0pHUk3s4
        autocmd BufNewFile,BufRead *.cpp set tw=80
        autocmd BufNewFile,BufRead *.c set tw=80
        autocmd BufNewFile,BufRead *.h set tw=80
    augroup END
endif

This created grouping of commands depending on the type of file that is opened, which is specified in the autocmd section. You still need to specify autocmd or au before each one, but they are nicely grouped.

于 2012-08-02T20:39:39.373 回答
3

我可能会执行每个文件类型的功能来为我进行设置。无耻地扯掉@Derek ...

function! SetUpLispBuffer()
    set lisp
    set showmatch
    set cpoptions-=m
    set autoindent
endfunction

function! SetUpCBuffer()
    set formatprg=c:\\AStyle\\bin\\AStyle.exe\ -A4Sm0pHUk3s4
    set tw=80
endfunction

if has("autocmd")
    augroup LISP
        au!
        au BufReadPost *.cl call SetUpLispBuffer()
    augroup END
    augroup C
        au!
        autocmd BufNewFile,BufRead *.{cpp,c,h} call SetUpCBuffer
    augroup END
endif

当您想进行更改时要更改的内容要少得多,剪切和粘贴的内容也要少得多。

于 2012-08-02T23:37:24.883 回答