Shell-Script

vim 中的高亮顯示:用註釋分隔符後跟特殊字元串來區分行

  • October 22, 2018

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,然後讓上面的程式碼檢查該標誌。

引用自:https://unix.stackexchange.com/questions/452461