如何在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。