nev*_*ame 70 linux vim bash syntax-highlighting vim-syntax-highlighting
我的Vim编辑器自动突出显示PHP文件(vim file.php),HTML文件(vim file.html)等.
但是当我输入:vim file并且在里面写一个Bash脚本时,它不会突出显示它.
我如何告诉Vim将其突出显示为Bash脚本?
我开始#!/bin/bash在文件的顶部键入,但它不能使它工作.
Mar*_*off 79
你是否正确地给shell脚本一个.sh扩展名?Vim的自动语法选择几乎完全基于文件名(扩展名)检测.如果文件没有语法集(或语法错误),Vim将不会因为您开始以给定语言键入脚本而自动更改为正确的语法.
作为临时解决方法,该命令:set syn=sh将打开shell脚本语法突出显示.
bry*_*ant 31
到目前为止,答案是正确的,您可以使用扩展名(如.sh)或shebang行(如#!/bin/bash)来标识文件类型.如果您没有其中一个,您仍然可以使用文件顶部或底部的模式行注释手动指定文件类型.
例如,如果要将没有扩展名的脚本标识为shell脚本,可以将此注释添加到文件的顶部:
# vim: set filetype=sh :
Run Code Online (Sandbox Code Playgroud)
要么
# vim: filetype=sh
Run Code Online (Sandbox Code Playgroud)
这将告诉vim将文件视为shell脚本.(您也可以在模式行中设置其他内容.在vim类型中:help modeline获取更多信息.)
Gau*_*are 20
实际上语法高亮是vim而不是vi的一个特性.尝试使用vim命令然后执行
:syntax on.
Mat*_*iva 14
Vim还可以通过检查其内容来检测文件类型(例如,如果第一行包含bash shebang),这里是filetype.txt帮助文件的引用:
如果只能通过检查文件内容来检测文件类型
创建用户运行时目录.您通常会使用'runtimepath'选项的第一项.Unix的示例:
:!mkdir ~/.vim
Run Code Online (Sandbox Code Playgroud)
为此执行创建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
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请参阅$ VIMRUNTIME/scripts.vim.在用户运行时目录中将此文件写为"scripts.vim".例如,对于Unix:
:w ~/.vim/scripts.vim
Run Code Online (Sandbox Code Playgroud)
检测将立即生效,无需重启Vim.
您的scripts.vim在默认检查文件类型之前加载,这意味着您的规则会覆盖$ VIMRUNTIME/scripts.vim中的默认规则.
Tha*_*tos 12
我来到这个答案,寻找具体如何突出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
Run Code Online (Sandbox Code Playgroud)
请注意,如果您ft已经存在sh,则仍需要该set命令; 否则let不会立即生效.
您可以通过将变量设为全局来使其成为全局默认值,即let g:is_bash = 1.
:help ft-sh-syntax是我必须找到的手册页; 它解释了这一点,以及如何触发突出显示其他风格的shell.