Vim不一致语法突出显示bash文件

Pet*_*ton 29 vim syntax-highlighting vim-syntax-highlighting

当我打开用vim一些bash脚本文件,它有时它们标识为conf文件,那也没关系,我可以正确的,在文件类型设置为sh使用:setf sh.

那太好了,除了我注意到这并不完全解决问题:

两个文件并排显示不同的突出显示

请注意,shopt左侧正确突出显示,但右侧未正确突出显示,我手动将文件类型设置为sh.

这意味着,当一个文件被标识为bashsh通过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.


Pet*_*ton 7

事实证明,syntax/sh.vim包括Korn,Bashsh的特定突出显示,你只需告诉它你正在使用它.这与做b:is_kornshell,b:is_bashb:is_sh分别.

根据具体情况,我将使用以下内容:

ftdetect/bash.vim:

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)

  • 不幸的是,对于这个用例,不可能在模式行中设置变量. (2认同)