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

Vim bash syntax highlighting with modeline

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

# vim:let g:is_bash=1:set filetype=sh:

.vimrc中:

filetype plugin indent on
syntax on
set modeline
set modelines=4

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

"packer/shunit2/include.sh" 85L, 2749C
Error detected while processing modelines:
line   85:
E518: Unknown option: let 

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

尽管有这么多页面建议它应该工作,但为什么这不起作用,错误消息是什么意思,我如何更改此设置以便我的 bash 脚本以正确的方式打开 bash 语法高亮?

Modeline 不允许您 运行 任何代码,只能设置选项。您要做的是 运行 一些将设置全局变量的 Vimscropt。那不会发生。

不对,that answer错了。您不能在 modeline 中定义变量,只能在那里设置(某些)options(出于安全原因)。

要实现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 plugin (especially with my own enhancements),它甚至允许本地特定于文件类型的配置)。这样,您可以将命令 (let b:is_bash = 1) 放入该项目根目录中的 .lvimrc 文件中,它会自动将设置应用于该子目录树中的所有文件。
  • 如果你真的想走 modeline 路线,let-modeline plugin 可以启用它。