2017-02-28 39 views
5

我一直在使用自定義的快捷鍵在這篇文章Indent multiple lines in Sublime Text不當崇高縮進文件

簡稱崇高文本縮進但是,如果有奇數數量的空格這是行不通的。像我的標籤大小設置爲2個空格,並且在任何行的開頭有3個空格時,它不會縮進剩餘的代碼。

例如:

<?php 

function test_indent() { 
    if (condition) { 
    echo "here"; 
    } 
    else { 
    echo "else"; 
    } 
} 

當我縮進與上述職位指定的自定義快捷鍵,這就是:

{ "keys": ["ctrl+shift+f"], "command": "reindent", "args": {"single_line": false} } 

對我來說,它的結果一樣:

function test_indent() { 
    if (condition) { 
    echo "here"; 
} 
else { 
    echo "else"; 
} 
} 

我需要做些什麼才能正確縮進?

+2

同時玩這個,我發現,如果你完全'unindent'你的文件第一,'reindent'將按預期工作 –

+0

我完全同意你的看法。但是應該有更好的解決方案。 –

+0

此行爲似乎影響許多類型的文件 - 不僅僅是PHP – AdamS

回答

4

雖然玩了這個,我發現,如果你完全unindent選擇第一,然後reindent將按預期工作。看起來這是reindent命令中的一個錯誤,當縮進不是所設置的「製表符大小」的倍數時發生。

因此,我們可以通過將快捷方式更改爲完全取消選擇並再次重新縮進它來解決此問題。

Tools菜單中,選擇Developer - >New Plugin...

選擇一切,並替換爲以下:

import sublime 
import sublime_plugin 
import re 

class UnindentAndReindentCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     while any([sel for sel in self.view.sel() if re.search('^[ \t]+', self.view.substr(sel.cover(self.view.line(sel.begin()))), re.MULTILINE)]): 
      self.view.run_command('unindent') 
     self.view.run_command('reindent', { 'single_line': False }) 

保存它,因爲ST暗示的位置,像fix_reindent.py - 文件擴展名很重要,但基名不是。

然後,改變你的鍵綁定使用我們剛創建的新unindent_and_reindent命令:

{ "keys": ["ctrl+shift+f"], "command": "unindent_and_reindent" } 

而且它現在會正確地再次縮進你的代碼。