Vim 编辑器带有许多不同编程语言的语法高亮。
问题:
- 在 Emacs 中,特定于语言的设置称为“模式”。然而,在 Vim 中,术语“模式”是指命令或插入模式。那么编程语言特定设置的 Vim 术语是什么?
- 文档的编程语言是由其文件扩展名还是由其内容决定的?
- 如何找出 Vim 处于哪种编程语言特定模式?
- 我怎样才能一劳永逸地覆盖某一类文档?
Vim 编辑器带有许多不同编程语言的语法高亮。
问题:
根据要求发布答案。
(1) 在 Emacs 中,特定于语言的设置称为“模式”。然而,在 vim 中,术语“模式”是指命令与插入模式。那么编程语言特定设置的 vim 术语是什么?
等效的 Vim 项是filetype
. Vim 使用filetype
s 来应用特定于语言的选项、缩进、语法高亮、键映射等。这在帮助中有详细描述,请参阅: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'
插件可以添加更多filetype
s,和/或覆盖标准的检测和处理。
(3) 如何知道 vim 处于哪种编程语言特定模式?
来自 Vim:
set ft?
(4) 我怎样才能一劳永逸地覆盖某一类文件?
要更改filetype
当前文件的:
:setf <new_filetype>
或者
:setl ft=<new_filetype>
要使更改永久化:从modeline
(cf. :h modeline
) 执行此操作。例如:
# vim: filetype=python
你也可以使用autocmd
s 来达到同样的效果:
autocmd BufRead,BufNewFile *.py setlocal filetype=python
请阅读:h filetype
,其中详细描述了所有这些。
它们如何被调用以及如何检测它们
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,您可以添加自己的语言特定设置。