Shell-Script
vim 中的高亮顯示:用註釋分隔符後跟特殊字元串來區分行
vim 中的高亮顯示:用註釋分隔符後跟特殊字元串來區分行
在某些情況下,例如用於 HPC 集群的腳本,當使用 SGE、TORQUE 或 Slurm 時,我們可以使用帶有註釋行的 shell 腳本(如 bash),用 # 表示,但網格命令用
#$
、#PBS
或#SBATCH
.什麼是保持與 bash 相同的突出顯示但不
#SomeString
被視為評論的簡單方法?
首先檢查 shell 語法腳本中的註釋定義:
:syn list shComment --- Syntax items --- shComment xxx match /^\s*\zs#.*$/ contains=@shCommentGroup match /\s\zs#.*$/ contains=@shCommentGroup match /#.*$/ contained contains=@shCommentGroup links to Comment
擴展語法集群
在那裡,您可以看到需要覆蓋哪些註釋模式。可是等等!
:help :syn-cluster
該語法腳本通過;提供了擴展機制。這contains=@shCommentGroup
syn match shHPC "PBS" contained
這將突出顯示評論中的
PBS
任何地方。如果可以跟隨其他內容,請附加.*$
到模式中。如果PBS
關鍵字必須直接跟在後面#
,請添加一個肯定的後向斷言:syn match shHPC "#\@<=PBS" contained
:syn match
您可以通過其他命令或使用正則表達式分支來使用所有其他關鍵字:"#\@<=\(PBS\|SBATCH\|...\)"
.最後,新的語法組必須包含在語法集群中以供註釋,並突出顯示以便您看到它:
syn cluster shCommentGroup add=shHPC hi link shHPC PreProc
定義覆蓋語法匹配
或者,您可能希望跳過集群並覆蓋註釋語法。例如,當特殊關鍵字只能出現在行首,但現在出現在 Bash 命令之後。或者,如果您無法忍受集群方法將保留
#
原始突出顯示的事實。syn match shHPC "^\s*\zs#PBS" hi link shHPC PreProc
啟動
由於這些命令擴展了內置語法,因此需要在它們之後執行。那個地方是
~/.vim/after/syntax/sh.vim
。如果您只想有條件地為某些項目啟動它們,您可以編寫一個設置標記變數的文件類型檢測,例如b:is_HPC
,然後讓上面的程式碼檢查該標誌。