我的 Vim 编辑器会自动高亮显示 PHP 文件 (vim file.php
)、HTML 文件 (vim file.html
) 等等。
但是当我输入命令 vim file
并在其中编写 Bash 脚本时,它不会对其进行高亮显示。
我该如何告诉 Vim 将其作为 Bash 脚本进行高亮显示?
我在文件顶部开始输入 #!/bin/bash
,但这并不能使其正常工作。
我的 Vim 编辑器会自动高亮显示 PHP 文件 (vim file.php
)、HTML 文件 (vim file.html
) 等等。
但是当我输入命令 vim file
并在其中编写 Bash 脚本时,它不会对其进行高亮显示。
我该如何告诉 Vim 将其作为 Bash 脚本进行高亮显示?
我在文件顶部开始输入 #!/bin/bash
,但这并不能使其正常工作。
您是否正确地为Shell脚本添加了.sh
扩展名?Vim的自动语法选择基本上完全基于文件名(扩展名)检测。如果文件没有设置语法(或语法不正确),Vim不会仅因为您开始输入特定语言的脚本而自动更改为正确的语法。
作为一种临时解决方法,命令:set syn=sh
将打开Shell脚本语法高亮显示。
.sh
)或者shebang行(如#!/bin/bash
)来识别文件类型是正确的。如果没有以上两种情况,你仍然可以在文件的顶部或底部加上modeline注释来手动指定文件类型。# vim: set filetype=sh :
或者# vim: filetype=sh
这将告诉vim将该文件视为shell脚本。(您还可以在modeline中设置其他内容。在vim中键入:help modeline
以获取更多信息)。
:
使得这个模型行起作用,如果没有最后的:
,这个模型行将无法起作用。帮助文档显示了一个不以:
结尾的模型行形式。 - orluke:help modeline
)指出了两个区别:(1)带有最终的:
版本“与某些Vi版本兼容”,(2)没有最终的:
,您不使用set
关键字。由于您可以在modeline后放置任何文本,因此最终的:
可以与或不与set
关键字一起使用。 - bryantsh
似乎突出显示POSIX shell而不是bash。值得注意的是,它将有效的bash语法标记为错误,这非常令人恼火。 - Thanatos:syntax on
。vim ~/.vimrc
在我的主目录中添加了一个 .vimrc 文件,并在文件中添加了 syntax on
,然后用 :x
命令保存并退出。 - James Owers我来到这个答案,特别是寻找如何突出显示 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的高亮。
sh
语法高亮器甚至将有效的 posix sh 代码标记为无效(例如 $(subshell)
)- 这也进行了更正。谢谢。 - Mahmoud Al-QudsiVim还可以通过检查文件内容(例如,如果第一行包含bash shebang)来检测文件类型。以下是filetype.txt
帮助文件中的一句话:
如果只有检查文件内容才能确定文件类型
创建您的用户运行时目录。您通常会使用'runtimepath'选项的第一项。Unix的示例:
:!mkdir ~/.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可以通过读取第一行来检测文件类型。将以下行添加为第一行。
#!/bin/sh
对于那些有类似问题的人,即如何在没有.sh
扩展名的情况下自动启用bash文件的语法突出显示...
在你的.vimrc
中添加 filetype on
。这还可以通过考虑文件内容来启用文件类型检测。例如,bash脚本将设置为sh
文件类型。然而,在使用vim创建新文件时,输入#!
将不会触发文件类型检测,此时您需要使用set ft=sh
。要了解更多信息,请在vim中键入:h filetype
。
如评论中所述,您需要与syntax enable
一起使用以启用突出显示。
或者您可以使用:filetype detect
。
从文档中可以看到:
如果您使用空文件并输入可检测文件类型的文本,请使用此选项。例如,当您在shell脚本中输入以下内容:“#!/bin/csh”。
filetype on
,不需要设置,你还需要 syntax enable
来打开语法高亮。 - D. Ben Knoble在文件顶部添加shebang后,保存并重新加载文件(例如:w|e
),语法着色就可以生效了。
另请参见Vim不一致地语法突出显示bash文件,接受的答案也可能有所帮助。
在编辑器内切换语法高亮的开/关。
打开
:syntax on
关闭
:syntax off
echo ":syntax on" >> ~/.vimrc
vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
bash
脚本确实都有.sh
后缀。如果要真正指定bash而不仅仅是sh
,则应在.sh
文件上使用#!/bin/bash
shebang行。 - Mark Rushakoffls.elf
吗?另外:Bash 脚本不是 sh 脚本(所以不要使用.sh
),并且扩展名只会在脚本被重写成另一种语言时引起依赖问题。请参见 http://www.talisman.org/~erlkonig/documents/commandname-extensions-considered-harmful" - Charles Duffy.py
扩展名表示Python“模块”,而不是位于PATH中的Python“脚本”),为脚本添加扩展名是一种广泛接受的好习惯。但在这种情况下,扩展名应正确反映脚本可以正确解析的shell类型;.sh
表示“与所有POSIX shell兼容”,这通常不适用于bash脚本。 - Charles Duffy