【问题标题】:Vim bash syntax highlighting with modeline使用模式行突出显示 Vim bash 语法
【发布时间】:2017-11-29 22:53:44
【问题描述】:

根据许多在线文档 (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 语法突出显示打开?

【问题讨论】:

    标签: vim vim-syntax-highlighting modeline


    【解决方案1】:

    不,that answer 是错误的。您不能在 modeline 中定义变量,只能在其中设置(某些)选项(出于安全原因)。

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

    • 在您的~/.vimrc 中全局let g:is_bash = 1。这是最简单的选项,但仅当您编辑的所有内容都是 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(尤其是 my own enhancements),它甚至允许本地文件类型特定的配置) .这样,您可以将命令 (let b:is_bash = 1) 放入该项目根目录中的 .lvimrc 文件中,它会自动将设置应用于该子目录树中的所有文件。
    • 如果你真的想走 modeline 路线,let-modeline plugin 可以实现这一点。

    【讨论】:

    • 谢谢,这真的很有帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2015-08-06
      • 2015-11-26
      • 2011-05-03
      • 1970-01-01
      • 2011-02-04
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多