vim:特定于编程语言的设置:如何调用它们,如何检测它们,如何覆盖它们?

Joa*_*m W 3 vim

编辑器 vim 带有许多不同编程语言的语法突出显示。问题:

(1) 在 Emacs 中,特定于语言的设置称为“模式”。然而,在 vim 中,术语“模式”是指命令与插入模式。那么什么是特定于编程语言的设置的 vim 术语呢?

(2) 文档的编程语言是由文件扩展名决定的,还是由其内容决定的?

(3) 如何找出 vim 处于哪种编程语言特定模式?

(4) 我怎样才能一劳永逸地覆盖某类文档?

Sat*_*ura 7

根据要求发布答案。

(1) 在 Emacs 中,特定于语言的设置称为“模式”。然而,在 vim 中,术语“模式”是指命令与插入模式。那么什么是特定于编程语言的设置的 vim 术语呢?

等效的 Vim 术语是filetype. Vim 使用filetypes 来应用特定于语言的选项、缩进、语法高亮、键映射等。这在帮助中有详细描述,参见:h filetype

要启用自动filetype检测和处理,您通常会在您的vimrc:

filetype plugin indent on
syntax on
Run Code Online (Sandbox Code Playgroud)

要覆盖 Vim 以这种方式提供的设置,您需要将覆盖添加到文件~/.vim/after/ftplugin/<filetype>.vim(或等效文件)中。有关:h ftplugin更多详细信息,请参阅。

(2) 文档的编程语言是由文件扩展名决定的,还是由其内容决定的?

两种方法都使用。Vim在其运行时目录filetype中的文件filetype.vim中进行大部分检测。要找出此文件的确切位置:

:echo $VIMRUNTIME.'/filetype.vim'
Run Code Online (Sandbox Code Playgroud)

插件可以添加更多的filetypes,和/或覆盖标准的检测和处理。

(3) 如何找出 vim 处于哪种编程语言特定模式?

来自 Vim:

set ft?
Run Code Online (Sandbox Code Playgroud)

(4) 我怎样才能一劳永逸地覆盖某类文档?

要更改filetype当前文件的 :

:setf <new_filetype>
Run Code Online (Sandbox Code Playgroud)

或者

:setl ft=<new_filetype>
Run Code Online (Sandbox Code Playgroud)

要使更改永久化:从modeline(cf. :h modeline) 开始。例如:

# vim: filetype=python
Run Code Online (Sandbox Code Playgroud)

你也可以使用autocmds 来达到同样的效果:

autocmd BufRead,BufNewFile *.py setlocal filetype=python
Run Code Online (Sandbox Code Playgroud)

请阅读:h filetype,其中详细描述了所有这些。