3

Vim 编辑器带有许多不同编程语言的语法高亮。
问题:

  1. 在 Emacs 中,特定于语言的设置称为“模式”。然而,在 Vim 中,术语“模式”是指命令或插入模式。那么编程语言特定设置的 Vim 术语是什么?
  2. 文档的编程语言是由其文件扩展名还是由其内容决定的?
  3. 如何找出 Vim 处于哪种编程语言特定模式?
  4. 我怎样才能一劳永逸地覆盖某一类文档?
4

2 回答 2

8

根据要求发布答案。

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

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

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

filetype plugin indent on
syntax on

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

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

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

:echo $VIMRUNTIME.'/filetype.vim'

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

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

来自 Vim:

set ft?

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

要更改filetype当前文件的:

:setf <new_filetype>

或者

:setl ft=<new_filetype>

要使更改永久化:从modeline(cf. :h modeline) 执行此操作。例如:

# vim: filetype=python

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

autocmd BufRead,BufNewFile *.py setlocal filetype=python

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

于 2016-10-20T12:05:16.110 回答
3

它们如何被调用以及如何检测它们

Vim 使用文件 filetype.vim 来确定文件的“类型”。因此,如果您正在编辑 python 文件“example.py”并且使用了命令:set ft? 它应该显示filetype=python。使用文件类型 VIM 确定是否加载了与 python 相关的任何插件缩进规则或语法高亮。

如何覆盖它们

通过将这些设置放在 vimrc 中,您可以编写自己的缩进规则,或语法高亮和其他编程语言规则。使用称为 VIML 的 vim 语言,您可以在 Learn Vimscript the Hard Way 中看到作者检测 Potion Filetypes 的这一部分。一旦您检测到使用文件扩展名完成的文件类型,例如 python 文件是 *.py 或 erlang 文件是 *.erl,您可以添加自己的语言特定设置。

于 2016-10-20T08:01:11.903 回答