Sublime Text 3 如何添加自定義關鍵詞的縮進規則?

我試圖從 Vim 轉移到 Sublime Text 3 上,但一件事阻礙了我,那就是 Sublime Text 3 默認對於 Matlab 的語法支持不夠好,例如:classdef 這樣的關鍵字,它不能識別。

我安裝了一個叫 PackageResourceViewer 的插件。用它,我能方便地找到並編輯 Matlab 的語法定義文件 Matlab.tmLanguage。通過編輯這個文件,我已經能夠實現自定義關鍵字 classdef 的:

  1. 高亮顯示
  2. 自動生成邊欄摺疊記號

但我還有第三個需求,就是讓這個關鍵字的下一行自動縮進。這個功能始終沒有實現。我注意到有一個文件叫 Indent.tmPreferences,嘗試編輯它,在裡面相應的位置(相同位置還有 function/if/for/while 等),添加上 classdef 關鍵字,但是不起作用。

請問:如何才能自定義一個關鍵字的縮進規則呢?(如果你不熟悉 Matlab,完全可以使用其他語言來回答)

編輯:添加了 Matlab 標籤。Matlab 用戶或許可以提供更完整的語法支持文件,省下我自己搞了。


回答自己的問題……

在 Sublime Text 3 中,語法定義文件被打包放在 &.sublime-package 里。例如,Matlab 的語法定義都在 Matlab.sublime-package 文件中。該文件可以在 &/Packages 下找到。*.sublime-package 文件其實就是 zip 壓縮包,解壓後可以編輯其中的內容,重新打包放回原處可達到自定義的目的,但不推薦這樣做。我們應該養成在用戶目錄下修改設定的好習慣。

為了方便修改這些資源,推薦安裝 PackageResourceViewer 這個插件。安裝好插件後,按 Ctrl+Shift+p,輸入 Open Resouce,然後輸入 Matlab,回車;再輸入 Indent,回車;再輸入 Matlab,回車。這樣,你就打開了兩個新文件,分別叫:Indent.tmPreferencesMatlab.tmLanguage.

在 Indent.tmPreferences 的第 40 行,新增一行,添加內容:

|classdef|properties|methods|events|enumeration|parfor|spmd

保存。

在 Matlab.tmLanguage 文件的第 11 行和第 614 行,在以 | 分隔的關鍵詞列表末尾添加同樣的內容,保存。

至此,你的 Sublime Text 3 應該能夠正確支持以上關鍵字了。

有時候,可能以上修改沒有生效。你需要清除緩存。緩存路徑如下:

Windows

%LOCALAPPDATA%Sublime Text 3Cache

Linux

~/.config/sublime-text-3/Cache

OS X

~/Library/Application Support/Sublime Text 3/Cache

BONUS

Matlab 語法定義中還有個小 bug,就是大於等於(&>=)和小於等於(&<=)中的等號不能高亮。要解決這個問題,只需要修改 Matlab.tmLanguage 文件中第 1064 行,把 >= 和 > 的順序互換。同理的還有 <= 和 < 。

忍不住想給自己點個贊!


給後來者留個方法,在sublime中添加QT關鍵詞的方法。

答案參見王備

為了方便修改這些資源,推薦安裝 PackageResourceViewer 這個插件。安裝好插件後,按 Ctrl+Shift+p,輸入 Open Resouce,然後輸入 c++

搜索這兩個文件,一個一個搜。

1

C++.sublime-syntax

打開了此文件時,使用ctrl+f 搜索"private",再搜到的位置後追加

「|signals|slots」 追加後的結果是public|private|protected|變為public|private|protected|signals|slots。

ctrl+s保存

2

按 Ctrl+Shift+p,輸入 Open Resouce,然後輸入 c++,搜索

Indentation Rules.tmPreferences文件

打開了此文件時,使用ctrl+f 搜索"private",再搜到的位置後追加

「|signals|slots」 追加後的結果是public|private|protected|變為public|private|protected|signals|slots。

ctrl+s保存

:flagTest隨便打開一個文件Ctrl+Shift+p 輸入c++ 選擇set syntex:c++

寫個類

class woshiyigelei

{

public:

private:

signals:

slots:

}

看看是不是成功縮進了。

如果沒有縮進,打開我的電腦,在地址欄輸入%LOCALAPPDATA%Sublime Text 3Cache

打開這個文件夾後全選,刪除所有文件。重新打開sublime text。 goto flagTest

另外

Qt Completions for C++

這個鏈接,自己去看看吧。


剛好在學matlab ,感覺很多函數在sublime下都沒有提示和高亮,在Matlab.tmLanguage里加上後確實可以高亮,但顏色是在哪裡設置的?還有代碼提示,自動補全什麼的


不懂Matlab,試試自定義Snippet。


推薦閱讀:

想從 Notepad++ 轉移到 Sublime Text 2,發現入門有點難,有什麼建議?
如何高效地使用 Sublime Text?
sublime text3有沒有自動保存文件的插件?
sublime text 3 插件推薦?
sublime text2如何讓編寫html時有自動提示?

TAG:MATLAB | SublimeText | SublimeText3 |