vim - rust vim 插件文件类型检测不起作用
问题描述
我在 ~/.vim/pack/plugins/start 中安装了 rust.vim 插件。如果我打开一个名为 main.rs 的文件并输入 :scriptnames,则输出如下
`
1: /usr/share/vim/vimrc
2: /usr/share/vim/vim74/debian.vim
3: /usr/share/vim/vim74/syntax/syntax.vim
4: /usr/share/vim/vim74/syntax/synload.vim
5: /usr/share/vim/vim74/syntax/syncolor.vim
6: /usr/share/vim/vim74/filetype.vim
7: /usr/share/vim/vim74/ftplugin.vim
8: /usr/share/vim/vim74/indent.vim
9: ~/.vim/plugin/ScrollColor.vim
10: ~/.vim/plugin/color_sample_pack.vim
11: ~/.vim/plugin/mimicpak.vim
12: /usr/share/vim/vim74/plugin/getscriptPlugin.vim
13: /usr/share/vim/vim74/plugin/gzip.vim
14: /usr/share/vim/vim74/plugin/logiPat.vim
15: /usr/share/vim/vim74/plugin/matchparen.vim
16: /usr/share/vim/vim74/plugin/netrwPlugin.vim
17: /usr/share/vim/vim74/plugin/rrhelper.vim
18: /usr/share/vim/vim74/plugin/spellfile.vim
19: /usr/share/vim/vim74/plugin/tarPlugin.vim
20: /usr/share/vim/vim74/plugin/tohtml.vim
21: /usr/share/vim/vim74/plugin/vimballPlugin.vim
22: /usr/share/vim/vim74/plugin/zipPlugin.vim
23: ~/.vim/pack/plugins/start/rust.vim/plugin/cargo.vim
24: ~/.vim/pack/plugins/start/rust.vim/plugin/rust.vim
25: ~/.vim/pack/plugins/start/rust.vim/ftdetect/rust.vim
26: /usr/share/vim/vim74/syntax/hercules.vim
`
如果我输入 :set ft,输出如下:
filetype=hercules
与 hercules 相关的 :autocmd filetypedetect 的输出:
*.vc setf hercules
*.ev setf hercules
*.rs setf hercules
*.sum setf hercules
*.errsum setf hercules
没有与生锈有关的线条
与大力神有关的:20verbose e main.rs 的输出:
Executing BufRead Auto commands for "*.rs"
autocommand setf hercules
line 0: setf hercules
接下来是一堆关于 Hercuels 格式的行。
Searching for "/.vim/ftplugin/hercules.vim"
Searching for "/.vim/ftplugin/hercules_*.vim"
Searching for "/.vim/ftplugin/hercules/*.vim"
Searching for "/.vim/pack/plugins/start/rust.vim/ftplugin/hercules.vim"
Searching for "/.vim/pack/plugins/start/rust.vim/ftplugin/hercules_*.vim"
Searching for "/.vim/pack/plugins/start/rust.vim/ftplugin/hercules/*.vim"
Searching for "/var/lib/vim/addons/ftplugin/hercules.vim"
Searching for "/var/lib/vim/addons/ftplugin/hercules_*.vim"
Searching for "/var/lib/vim/addons/ftplugin/hercules/*.vim"
Searching for "/usr/share/vim/vimfiles/ftplugin/hercules.vim"
这个搜索块稍后也会重复。在输出的最后是这样的:
Executing BufRead Auto commands for "*.rs"
autocommand setf rust
line 0: setf rust
Executing BufEnter Auto commands for "*"
autocommand sil call s:LocalBrowse(expand("<amatch>"))
line 0: sil call s:LocalBrowse(expand("<amatch>"))
谁能告诉我如何让 vim 将文件类型读取为 rust 而不是 hercules?
解决方案
检查 的输出:autocmd filetypedetect
。对我来说(Vim 8.1.744),以下模式适用于hercules
/ rust
。(我不知道 rust.vim 插件做了什么,但至少文件类型检测、插件和语法已经随 Vim 本身提供。)
*.vc setf hercules
*.ev setf hercules
*.sum setf hercules
*.errsum setf hercules
[...]
*.rs setf rust
对你来说,输出大概是不同的。您需要找出错误模式的来源。一种方法是观察打开文件时执行的所有命令:
:20verbose e main.rs
如果 hercules 文件类型优先于 rust 文件类型(根据您的编辑似乎就是这种情况),您要么必须删除 hercules 文件类型(我想知道那个*.rs
glob 是从哪里来的,即使我的旧 Vim 7.4 也没有它),或定义如下所述的覆盖:help new-filetype
:A. 如果要覆盖所有默认文件类型检查。也就是说,创建一个文件~/.vim/ftdetect/rust.vim
:
au BufRead,BufNewFile *.rs set filetype=rust
请注意区别::set filetype=
是无条件设置,而:setf
默认规则使用的设置仅在尚未定义的情况下设置(因此到目前为止,hercules 首先为您赢得了胜利)。
推荐阅读
- firebase - firebase 与颤振应用程序没有连接
- javascript - 将javascript组件添加到角度应用程序中
- unity3d - Unity3D如何复制对象粘贴到同一位置?
- mongodb - 无法使用 localhost 连接到 Ubuntu 上 docker 上托管的 mongo db 副本集
- excel - 如何“一般”从脚本中选择工作表
- android - ProgressBar中进度右侧的TextView
- html - 如何在使用“Flex”作为显示悬停时停止不需要的链接移动?
- python - Python 线程和 Telnet 意外结果
- javascript - 我们如何对具有双重条件的js对象进行排序
- java - JavaFX 无法连接到 MYSQL