2012-05-29 26 views
2

我的vi在突出顯示我的bash腳本中的錯誤方面非常出色。不過,我注意到的一件事是,當我對所有upppercase或全部小寫使用bash擴展名時,vi將字符突出顯示爲錯誤。有沒有解決方案?vi突出顯示bash腳本大小寫錯誤

#!/bin/bash 
mystr="Abc" 
echo ${mystr,,} # Works, but vi highlights ,, as in error 

% ./test.sh 
abc 
% 
+0

我不認爲'echo $ {mystr ,,}有效......但我看到你的問題。例如,'echo $ {mystr // A/a}'突出顯示爲錯誤。 –

+0

@Tim工作在bash 4.0 - http://stackoverflow.com/questions/2264428/converting-string-to-lower-case-in-bash-shell-scripting – maverick

+0

啊,我只是證實。補充新功能... –

回答

2

VIM語法高亮顯示是通過Syntax文件完成的。進入VIM並輸入:echo $VIMRUNTIME。這會告訴你VIMRUNTIME目錄。在該目錄中,有一個名爲syntax的目錄。裏面是語法定義。有一個名爲sh.vim的文件,其中包含BASH,Kornshell和Bourne shell的定義。

看看身邊文件的線#400一看,你會看到這樣的事情:

" Special ${parameter OPERATOR word} handling: {{{1 
" sh ksh bash : ${parameter:-word} word is default value 
" sh ksh bash : ${parameter:=word} assign word as default value 
" sh ksh bash : ${parameter:?word} display word if parameter is null 
" sh ksh bash : ${parameter:+word} use word if parameter is not null, otherwise nothing 
" ksh bash : ${parameter#pattern} remove small left pattern 
" ksh bash : ${parameter##pattern} remove large left pattern 
" ksh bash : ${parameter%pattern} remove small right pattern 
" ksh bash : ${parameter%%pattern} remove large right pattern 

正是在此部分定義模式,以及他們是否是合法與否。你需要定義一個看起來像這樣的區域:

if exists("b:is_bash") 
    Here be dragons 
endif 

其實,我在sh.vim文件的最新版本看到一個越往下線#423,這樣你就不必定義自己。現在

,所有你需要做的就是與一些定義你要顯示的不是一個錯誤的語法替換Here be dragons部分。我不知道VIM語法足以告訴你。但是,它看起來並不複雜。備份舊的sh.vim,並有一些樂趣。信不信由你,它在VIM中都有記載。我修改了Perl和Python的語法文件,沒有太多問題。

,你也可以去https://vim.svn.sourceforge.net/svnroot/vim/vim7/runtime/syntax/,看看是否有一個新的sh.vim文件,可能包括你所需要的語法修復。

您也可以將問題報告給VIM project,讓他們瞭解這個問題。他們對解決這類問題非常好,然後你可以在上面的Subversion URL上下載最新的修復程序。

+0

這是我隱藏的議程:瞭解vi如何解析不同語言的語法,並且向我個人解釋。 Mucho謝謝! – maverick