ctrl+shift+p filters: :st2 :st3 :win :osx :linux
Browse

Fullwidth​Tab​Spaces

by woodmix ST3

Sublime plugin to optimize the function of translate_tabs_to_spaces for lines containing full-width characters

Details

Installs

  • Total 34
  • Win 21
  • Mac 7
  • Linux 6
Jan 30 Jan 29 Jan 28 Jan 27 Jan 26 Jan 25 Jan 24 Jan 23 Jan 22 Jan 21 Jan 20 Jan 19 Jan 18 Jan 17 Jan 16 Jan 15 Jan 14 Jan 13 Jan 12 Jan 11 Jan 10 Jan 9 Jan 8 Jan 7 Jan 6 Jan 5 Jan 4 Jan 3 Jan 2 Jan 1 Dec 31 Dec 30 Dec 29 Dec 28 Dec 27 Dec 26 Dec 25 Dec 24 Dec 23 Dec 22 Dec 21 Dec 20 Dec 19 Dec 18 Dec 17
Windows 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Mac 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Readme

Source
raw.​githubusercontent.​com

FullwidthTabSpaces (en)

(Translated with www.DeepL.com/Translator free version)

Sublime Text has a setting called translate_tabs_to_spaces which, if set to true, will cause horizontal tabs to be inserted using space characters. However, since the tab stop position is calculated based on the number of characters only, the stop position will be shifted if the line contains full-width characters in front. This plugin compensates for this problem.

However, it assumes monospaced fonts. If you are using a proportional font, it is not recommended because the space characters inserted by horizontal tabs will be inconsistent.

Internally, it works by intercepting the command (“insert”, {“characters”:“\t”}), so no special configuration is required, just install it and it will work. If you want to turn off the feature, disable it or uninstall it.

It only works if translate_tabs_to_spaces is set to true.

Starting with Sublime Text Build 4143, there has been a major modification to autocomplete so that pressing the Tab key in the position following a word character now issues an “auto_complete” command instead of an “insert” command. If there is no candidate for completion, a tab insertion is performed, but there is no way to intercept this, so it cannot be fixed. The “auto_complete” command can also be issued by Alt+/ or Ctrl+Space, so if you want to stop issuing the “auto_complete” command using the Tab key, you can do so. Add the following settings in Preferences => Key Bindings.

{ "keys": ["tab"], "command": "insert", "args": {"characters": "\t"} ,
        "context":
        [
            { "key": "auto_complete_visible", "operand": false },
            { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
            { "key": "setting.tab_completion", "operator": "equal", "operand": true },
            { "key": "preceding_text", "operator": "regex_match", "operand": ".*\\w", "match_all": true },
        ]
    },

In Preferences => Settings, setting “tab_completion” to false will only slightly change the behavior of autocompletion, but will not change the fact that the “auto_complete” command is issued itself. Please set it back to true for the above settings.

In addition, it includes a command to align digits by inserting a space in front of multiple carets. You can use it by setting Preferences => Key Bindings to { "keys": ["ctrl+alt+a"], "command": "fullwidth_tab_align" }, and so on.

* I don't have a Mac, so it has not been tested on a Mac.

FullwidthTabSpaces (ja)

Sublime Text には translate_tabs_to_spaces という設定項目があって、trueにすると水平タブがスペース文字を使って挿入されるようになります。 しかし、単純に字数のみでタブストップ位置を計算しているため、前方に全角文字を含む行ではストップ位置がずれます。このプラグインはこの問題を補正します。

ただし等幅フォントを前提としています。プロポーショナルフォントをお使いの場合は水平タブで挿入されるスペース文字列が一定しなくなるので、オススメしません。

内部的には (“insert”, {“characters”: “\t”}) のコマンドをインターセプトして動作しますので、特に設定は不要です。インストールするだけで効果を発揮します。 機能をオフにしたい場合は無効化するかアンインストールして下さい。

機能が働くのは translate_tabs_to_spaces がtrueになっている場合のみです。falseの場合は何もしません。

Sublime Text Build 4143 よりオートコンプリートに大きな改修が入って、単語文字に続く位置でTabキーを押すと “insert” コマンドではなく “auto_complete” コマンドが発行されるようになりました。 コンプリート候補がない場合はタブ挿入が行われるのですが、これをインターセプトする手段がないため修正できません。 “auto_complete” コマンドは Alt+/ や Ctrl+Space でも発行できるので、Tabキーによる “auto_complete” コマンド発行を止めても良いなら対応が可能です。 Preferences => Key Bindings で次の設定を追加してください。

{ "keys": ["tab"], "command": "insert", "args": {"characters": "\t"} ,
        "context":
        [
            { "key": "auto_complete_visible", "operand": false },
            { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
            { "key": "setting.tab_completion", "operator": "equal", "operand": true },
            { "key": "preceding_text", "operator": "regex_match", "operand": ".*\\w", "match_all": true },
        ]
    },

Preferences => Settings で tab_completion を false にしても、オートコンプリートの挙動が少し変わるだけで、"auto_complete" コマンドが発行されること自体は変わりません。 上記の設定を行う場合は true に戻しておいてください。

ついでに、複数のキャレットの前方にスペースを挿入して桁位置を合わせるコマンドも入っています。 Preferences => Key Bindings で { "keys": ["ctrl+alt+a"], "command": "fullwidth_tab_align" }, などと設定していただくことで使用できます。

※私はMacを所持していませんので、Macでの動作確認は行われていません。