使用模式行突出显示 Vim bash 语法

Ale*_*vey 1 vim modeline vim-syntax-highlighting

根据许多在线文档(例如),我应该能够通过添加以下行来通过模式行启用 bash 语法突出显示:

# vim:let g:is_bash=1:set filetype=sh:
Run Code Online (Sandbox Code Playgroud)

并在.vimrc

filetype plugin indent on
syntax on
set modeline
set modelines=4
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我添加这些行时,我收到一条错误消息:

"packer/shunit2/include.sh" 85L, 2749C
Error detected while processing modelines:
line   85:
E518: Unknown option: let 
Run Code Online (Sandbox Code Playgroud)

其中第 85 行当然是上面的模式行。(它是文件中的最后一行。)

尽管有这么多页面表明它应该起作用,为什么这不起作用,错误消息是什么意思,我该如何更改此设置,以便我的 bash 脚本以正确的 bash 语法突出显示打开?

Ing*_*kat 5

不,这个答案是错误的。您不能在modeline 中定义变量,只能在那里设置(某些)选项(出于安全原因)。

要实现 bash 语法高亮,您有以下选项:

  • 全局let g:is_bash = 1在您的~/.vimrc. 这是最简单的选项,但仅当您编辑的所有内容都是 Bash(不是 Korn shell 或任何其他 shell 方言)时才有效。
  • shebang正确设置为#!/bin/bash; 在$VIMRUNTIME/syntax/sh.vim随后会自动检测到它。
  • 编写自定义检测 Bash 文件。如果您可以根据文件位置/名称执行此操作,:autocmd BufNew,BufRead {pattern} let b:is_bash = 1就可以了。如果您需要检查文件内容,请将代码放入~/.vim/ftplugin/sh_bashdetection.vim左右。
  • 如果您的所有 Bash 文件都在某些项目/目录中,则使用本地 vimrc 插件(我推荐使用localrc 插件(尤其是我自己的增强功能),它甚至允许特定于本地文件类型的配置)。有了它,您可以将命令 ( let b:is_bash = 1) 放入.lvimrc该项目根目录中的文件中,它会自动将设置应用于该子目录树中的所有文件。
  • 如果你真的想要去的模式行路线,在松懈模式行插件支持这个。