Pet*_*ton 29 vim syntax-highlighting vim-syntax-highlighting
当我打开用vim一些bash脚本文件,它有时它们标识为conf文件,那也没关系,我可以正确的,在文件类型设置为sh使用:setf sh.
那太好了,除了我注意到这并不完全解决问题:

请注意,shopt左侧正确突出显示,但右侧未正确突出显示,我手动将文件类型设置为sh.
这意味着,当一个文件被标识为bash或sh通过VIM,它设置文件类型为sh后来做了一些额外的步骤,当我手动设置文件类型我不这样做.
任何人都知道那可能是什么,以及我如何解决它?
rai*_*mue 31
vim默认识别了很多文件类型.他们中的大多数都通过文件扩展名工作,但在这种情况下,vim还会分析文件的内容以猜测正确的类型.
VIM将像特定文件名的文件类型.bashrc,.tcshrc自动等.但是具有.sh扩展名的文件将被识别为csh,ksh或bash脚本.要确定这是什么类型的脚本,vim会读取文件的第一行来查看#!线.
如果第一行包含单词bash,则将该文件标识为bash脚本.通常您会看到#!/bin/bash脚本是否要直接执行,对于其他一些shell配置文件,您应该使用文件扩展名.bash.
vim的帮助解释了这一点:help ft-bash-syntax.您还可以let g:is_bash=1在.vimrc中使用bash语法突出显示所有文件的默认值filetype=sh.如果您想查看详细信息,请执行此操作$VIMRUNTIME/filetype.vim.
事实证明,syntax/sh.vim包括Korn,Bash和sh的特定突出显示,你只需告诉它你正在使用它.这与做b:is_kornshell,b:is_bash和b:is_sh分别.
根据具体情况,我将使用以下内容:
au BufRead,BufNewFile *bash* let g:is_bash=1
au BufRead,BufNewFile *bash* setf sh
Run Code Online (Sandbox Code Playgroud)
# vim:let g:is_bash=1:set filetype=sh:
Run Code Online (Sandbox Code Playgroud)
nmap <silent> <leader>b :let g:is_bash=1<cr> :setf sh<cr>
Run Code Online (Sandbox Code Playgroud)