2017-02-05 61 views
2

要自定義崇高文字的何時縮進換行,根據當前行的行爲,一個可以改變whatever.tmPreferences文件適當設置increaseIndentPatterndecreaseIndentPattern選項,如例如this other answer中所示。如何使崇高文本3縮進換行符當插入符號是括號內(或其他符號)

不過,我似乎無法工作,如何產生以下行爲:給予類似的

[<cursor here>] 

同方brakets光標之間的一條線,按enter我想以下結果:

[ 
    <cursor here> 
] 

這是一個例子,當修改一個xml文件時,如果在兩個括號之間輸入,會發生什麼情況,如<sometag><cursor here></sometag>

我試圖查看tmPreferences文件的xml,但無濟於事。

類似的問題已經被問here,但有幾個原因,本之一是不同的:

  1. 我想只對特定的文件擴展名來實現這種行爲,與包運。所以我也在問我應該把這個自定義鍵綁定的說明放在哪裏。
  2. 在鏈接問題中,問題更簡單:只需在某些大括號之間正確添加和縮進換行符。這對我們來說並不直截了當(如上面引用的例子),我們希望在類似XML的標籤之間換行,因爲在這種情況下,我們必須以某種方式處理正則表達式,驗證左邊和正確的模式匹配。

這種行爲如何實現?

+0

可能重複[如何在ST3中設置括號縮進行爲](http://stackoverflow.com/questions/41456641/how-to-set-bracket-indentation-behavior-in-st3) –

+0

@KeithHall thanks for鏈接。這確實是非常相關的,但不是真正的直接答案。例如,在帖子中顯示'xml'的情況下,我無法在'Packages'的'XML'文件夾中找到任何'.sublime-keymap'文件,所以我不知道該鍵綁定的位置。 – glS

+0

你的用戶密鑰綁定總是在你的用戶包中,它們不在與你想要使用它們的地方相關的包中。爲了使綁定僅作爲XML文件的鏈接工作,您只需添加一個額外的上下文來檢查它是否爲XML文件。查看默認密鑰綁定文件中最後一個綁定的示例。 – OdatNurd

回答

3

要製作將與包裝一起發貨的鍵綁定,請創建a Default.sublime-keymap file in your package

通常,Sublime Text會查看用於突出顯示文檔的語法,而不是使用的文件擴展名,以確定keybindings/plugins是否應該處於活動狀態等。這主要是因爲它可以處理那些沒有「還沒有保存。如果您想遵循此準則,則可以使用selector鍵綁定上下文。對於XML文件,您可能需要使用source.xml。否則,您將需要創建一個EventListener,它定義了一個on_query_context方法來檢查view.file_name()。您可以使用os.path.splitext方法來檢索文件擴展名。

如果你是真正的XML處理,那麼你可以使用默認的auto_indent_tag鍵綁定爲靈感:

{ "keys": ["enter"], "command": "auto_indent_tag", "context": 
    [ 
     { "key": "setting.auto_indent", "operator": "equal", "operand": true }, 
     { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, 
     { "key": "selector", "operator": "equal", "operand": "punctuation.definition.tag.begin", "match_all": true }, 
     { "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true }, 
     { "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true }, 
    ] 
}, 

建立類似:

{ "keys": ["enter"], "command": "insert_snippet", "args": { "contents": "\n\t$1\n" }, "context": 
    [ 
     { "key": "setting.auto_indent", "operator": "equal", "operand": true }, 
     { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, 
     { "key": "selector", "operator": "equal", "operand": "text.xml punctuation.definition.tag.begin", "match_all": true }, 
     { "key": "preceding_text", "operator": "regex_contains", "operand": ">$", "match_all": true }, 
     { "key": "following_text", "operator": "regex_contains", "operand": "^</", "match_all": true }, 
    ] 
}, 

這裏使用的正則表達式是非常簡單的,只要在插入符號爲>之前立即檢查文本,在插入符號後立即插入文本即爲</。這是可能的,因爲selector檢查以下內容:a)我們是否使用XML語法; b)緊隨插入符號的範圍爲punctuation.definition.tag.begin。 (您可以從工具菜單 - >開發人員 - >顯示範圍名稱,直接在插入符右側手動檢查範圍。)如果您使用的是自定義語法,則需要確保相應地調整這些內容。

在這種情況下,因爲我們使用輸入鍵的鍵綁定,所以在tmPreferences文件中指定的縮進規則將被忽略。

相關問題