我的Vim编辑器自动突出显示PHP文件(vim file.php
),HTML文件(vim file.html
)等。
但是当我键入:vim file
并在其中写入一个Bash脚本时,它不会突出显示它。
如何告诉Vim将其突出显示为Bash脚本?
我开始在文件顶部键入#!/bin/bash
,但它无法正常工作。
答案 0 :(得分:75)
您是否正确地为shell脚本提供.sh
扩展名? Vim的自动语法选择几乎完全基于文件名(扩展名)检测。如果文件没有语法集(或语法错误),Vim将不会因为您开始使用给定语言键入脚本而自动更改为正确的语法。
作为临时解决方法,命令:set syn=sh
将打开shell脚本语法高亮显示。
答案 1 :(得分:29)
到目前为止,答案是正确的,您可以使用扩展名(如.sh
)或shebang行(如#!/bin/bash
)来识别文件类型。如果您没有其中一个,您仍然可以使用文件顶部或底部的模式行注释手动指定文件类型。
例如,如果要将没有扩展名的脚本识别为shell脚本,可以将此注释添加到文件的顶部:
# vim: set filetype=sh :
或
# vim: filetype=sh
这将告诉vim将文件视为shell脚本。 (您也可以在模式行中设置其他内容。在vim类型:help modeline
中获取更多信息。)
答案 2 :(得分:17)
实际上语法高亮是vim而不是vi的一个特性。 尝试使用vim命令,然后执行
:syntax on
。
答案 3 :(得分:13)
Vim还可以通过检查其内容来检测文件类型(例如,如果第一行包含bash shebang),这里是来自filetype.txt
帮助文件的引用:
如果只能通过检查文件内容来检测您的文件类型
创建用户运行时目录。您通常会使用'runtimepath'选项的第一项。 Unix的例子:
:!mkdir ~/.vim
创建一个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在默认检查文件类型之前加载 表示您的规则覆盖默认规则 $ VIMRUNTIME /的scripts.vim。
答案 4 :(得分:11)
我来到这个答案,专门寻找如何突出 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
不会立即生效。
您可以将变量设为全局变量,即全局默认值,即let g:is_bash = 1
。
:help ft-sh-syntax
是我必须找到的手册页;它解释了这一点,以及如何触发突出显示其他类型的shell。
答案 5 :(得分:7)
vim可以通过最高评论
进行检测在文件顶部尝试此行
#!/bin/sh
答案 6 :(得分:2)
在文件顶部添加shebang后,保存并重新加载(例如:w|e
),语法着色可以启动。
另见Vim inconsistently syntax highlighting bash files,接受的答案也可能有所帮助。
答案 7 :(得分:1)
对于那些有此问题的变体的人,即在打开后如何自动在没有扩展名.sh
的bash文件上启用语法突出显示...
在您的filetype on
中添加.vimrc
。这还可以通过考虑文件内容来进行文件类型检测。例如,bash脚本将被设置为sh
文件类型。但是,键入#!
不会触发用vim创建的新文件的文件类型检测,在这种情况下,您将需要使用set ft=sh
。要获取更多info,请在vim中输入:h filetype
。
如评论中所述,您需要将其与syntax enable
结合使用以启用突出显示。
或者您可以使用:filetype detect
。
来自文档:
如果您以一个空文件开头并键入使 可以检测文件类型。例如,当您输入 这在shell脚本中:“#!/ bin / csh”。
答案 8 :(得分:0)
默认情况下,vim已识别出多种文件类型。他们中的大多数都是通过文件扩展名工作的,但在这种情况下,vim还会分析文件内容以猜测正确的类型。
vim会自动为.bashrc
,.tcshrc
等特定文件名设置文件类型。但是具有.sh
扩展名的文件将被识别为csh,ksh或bash脚本。要确定这是什么类型的脚本,vim会读取文件的第一行来查看#!线。
如果第一行包含单词bash
,则该文件被标识为bash脚本。通常您会看到#!/bin/bash
是否要直接执行脚本,但对于使用简单# bash
的shell配置文件也可以。
如果您想查看详细信息,请在$VIMRUNTIME/filetype.vim
。
答案 9 :(得分:0)
在新文件上获取语法高亮显示的最简单方法可能就是在编写shebang行后重新加载它。一个简单的:w
:e
将写出文件,重新加载它,并解释你刚刚编写的shebang行,为你提供适当的语法高亮。
答案 10 :(得分:0)
如果您在打开脚本之前已经知道文件类型,或者如果您在没有常用扩展名的情况下创建新脚本,则可以在命令行上将其传递给vim,如下所示:
vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
答案 11 :(得分:-1)
创建新文件时,只有文件名检测才会起作用;如果在创建新缓冲区后键入内容检测(#!/bin/bash
),则内容检测不适用。
明智的做法是第一次执行:set ft=bash
,然后编辑 next 时间,#!/bin/bash
会自动设置正确的文件类型。