如何在Vim中突出显示Bash脚本?

我的Vim编辑器会自动突出PHP文件( vim file.php ),HTML文件( vim file.html )等等。

但是,当我键入: vim file并在里面写一个Bash脚本,它不会突出显示它。

我怎样才能让Vim把它作为一个Bash脚本来突出显示呢?

我开始在文件的顶部input#!/bin/bash ,但是不能使它工作。

你正确地给shell脚本一个.sh扩展名吗? Vim的自动语法select几乎完全基于文件名(扩展名)检测。 如果文件没有设置语法(或语法错误),Vim将不会自动更改为正确的语法,只是因为您开始以给定的语言键入脚本。

作为一个临时解决方法,命令:set syn=sh将启用shell脚本语法高亮显示。

到目前为止的答案是正确的,你可以使用扩展名(如.sh )或一个shebang行(如#!/bin/bash )来标识文件types。 如果您还没有其中之一,则仍然可以通过在文件顶部或底部使用模态行注释来手动指定文件types。

例如,如果您想要将没有扩展名的脚本识别为shell脚本,则可以将此注释添加到文件顶部:

 # vim: set filetype=sh : 

要么

 # vim: filetype=sh 

这将告诉vim将文件视为shell脚本。 (你也可以在modeline中设置其他的东西,在vim中input:help modeline获取更多的信息)

Vim还可以通过检查文件的内容来检测文件types(例如,如果第一行包含bash文件),下面是filetype.txt帮助文件的引用:

如果您的文件types只能通过检查文件的内容来检测

创build您的用户运行时目录。 您通常会使用'runtimepath'选项的第一项。 Unix的例子:

 :!mkdir ~/.vim 

创build一个vim脚本文件来做到这一点。 例:

 if did_filetype() " filetype already set.. finish " ..don't do these checks endif if getline(1) =~ '^#!.*\<mine\>' setfiletype mine elseif getline(1) =~? '\<drawing\>' setfiletype drawing endif 

有关更多示例,请参阅$ VIMRUNTIME / scripts.vim。 在用户运行时目录中将此文件写为“scripts.vim”。 例如,对于Unix:

 :w ~/.vim/scripts.vim 

检测将立即工作,无需重新启动Vim。

您的scripts.vim会在文件types的默认检查之前加载,这意味着您的规则会覆盖$ VIMRUNTIME / scripts.vim中的默认规则。

实际上,语法高亮是vim不是vi的一个特性。 尝试使用vim命令,然后执行

:syntax on

vim可以通过顶级评论来检测

尝试在文件顶部的这一行

 #!/bin/sh 

一旦将文件添加到文件的顶部,保存并重新加载(例如:w|e ),并且可以使用语法着色。

另请参阅Vim不一致的语法突出显示bash文件 ,接受的答案也可以帮助。

我来到这个答案寻找具体如何突出bash语法,而不是POSIX shell。 简单地做一个set ft=sh (或等价的)将导致文件被POSIX shell高亮显示,这留下了许多在bash以红色突出显示的语法。 为了得到bash突出显示:

 " Set a variable on the buffer that tells the sh syntax highlighter " that this is bash: let b:is_bash = 1 " Set the filetype to sh set ft=sh 

请注意,如果您的ft已经是sh ,您仍然需要set命令; 否则let不立即生效。

你可以通过使全局variables成为一个全局的默认值,即let g:is_bash = 1

:help ft-sh-syntax是我必须find的手册页面; 它解释了这一点,以及如何触发突出其他口味的shell。

vim已经默认识别很多文件types。 他们中的大多数是通过文件扩展名工作的,但是在这种情况下,vim也会分析文件的内容来猜测正确的types。

vim会自动为.bashrc.tcshrc等特定文件名设置文件types。 但扩展名为.sh的文件将被识别为csh,ksh或bash脚本。 为了确定究竟是什么样的脚本,vim读取文件的第一行来查看#! 线。

如果第一行包含单词bash ,则该文件被标识为bash脚本。 通常你会看到#!/bin/bash如果脚本是直接执行的话,但是对于一个使用简单的# bash的shellconfiguration文件也是可以的。

如果您想查看详细信息,请在$VIMRUNTIME/filetype.vim

在新文件上获取语法突出显示的最简单方法是在写入shebang行之后重新加载它。 一个简单的:w :e会写出文件,重新加载它,然后解释你刚才编写的shebang行,为你提供合适的语法高亮。

如果您在打开脚本之前已经知道文件types,或者如果您正在创build一个没有常见扩展名的新脚本,则可以在命令行上将它传递给vim,如下所示:

 vim -c 'setfiletype sh' path/to/script vim -c 'setfiletype python' path/to/script 

当你创build一个新文件时,只有文件名检测才会起作用。 内容检测( #!/bin/bash )不适用,如果您在创build新缓冲区后键入它。

明智的做法是:set ft=bash第一次:set ft=bash下次编辑时, #!/bin/bash会自动设置正确的文件types。