VIM 的 modeline 和 autocmd

Posted michellel.top

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VIM 的 modeline 和 autocmd相关的知识,希望对你有一定的参考价值。

modeline

vim的modeline可以让你针对每个文件进行文件级别的设置,这些设置是覆盖当前用户的vimrc中的设置的。当vim打开一个包含了vim modeline注释行的文件时,会自动读取这一行的参数配置并调整自己的设置到这个配置。vim默认关闭modeline,开启的话需要在你的home下的.vimrc文件中增加一行:

set modeline

在文件的首行/尾行(必须),写一行当前这个文件里面语言所支持的注释,例如写shell就是#,写Python就是#,写php就//或/**/,然后在里面加上modeline识别的固定格式,举例:

# vim: set expandtab ts=4 sts=4 sw=4 : 

上面的注释中,‘#‘后面、"vim:"前面的空格是必须的,结尾的‘:‘也是必须的,这些是modeline所识别的。中间就是熟悉的vimrc中的设置了。在不同的语言中,注释的语法也不一样,所有在其他语言中可能有不同写法。

在文家里面,可以用该文件标准的注解形式向 vim 下指令。譬如一个 reStructuredText 格式的文字档,你可以加上以下的 modeline,让 vim 在读它的时候自动把档案解释为 rst (以取得正确的语法高亮):

 .. vim: set ft=rst:

modeline 里可以放的指令不限一个,所以我.py 档案在档尾都有这麽一行的 modeline

 # vim: set ai et nu sw=4 ts=4 tw=79:

autocmd

只有自己会看的档案这麽作当然没什麽问题,但如果有别人会看的话,这位别人用的又也是 vim,我们设的 modeline 或许会有点扰人。不过,vim 这麽强大的软体,难道不能设定为根据档案型态决定统一的设定吗?当然可以,vim 可以针对指定的条件,在软体发生指定事件的时候执行指令。这个功能叫作 autocmd。假设我希望在开启每一个 .py 档的时候都执行上面 modeline 的那些指令,可以设定一个以下的 autocmd (写在你的 .vimrc 或 Windows 下的 vimrc 里)

 au BufRead *.py set ai et nu sw=4 ts=4 tw=79

如果我们写的程式要给别人看,希望留给别人的 vim 一点设定的空间,可以使用 autocmd 取代 modeline

以上是关于VIM 的 modeline 和 autocmd的主要内容,如果未能解决你的问题,请参考以下文章

Vim autocmd无法正确映射映射

蝴蝶效应--由'sudo -s ...'引发的vim autocmd使用异常

oeasy教您玩转vim - 88 - # 自动命令autocmd

CVE-2019-12735 VIM命令执行漏洞利用

Vim 和 NeoVim 曝出高危漏洞

Vim任意代码执行漏洞(CVE-2019-12735)