1

根据许多在线文档(例如),我应该能够通过添加如下行来通过模式行启用 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 语法突出显示打开?

4

2 回答 2

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该项目根目录中的文件中,它会自动将设置应用于该子目录树中的所有文件。
  • 如果你真的想走modeline路线,let-modeline 插件可以实现这一点。
于 2017-11-30T08:49:26.397 回答
2

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

于 2017-11-29T22:59:49.580 回答