崇高なテキスト3、スペースをタブに変換


192

これについてはたくさんの記事があることは知っていますが、うまく機能させることができませんでした。
コーディングにはタブを使用します。常にスペースをタブに変換する方法はありますか?つまり、ファイルを開いたり保存したりしますか?誰かがアイデアを得ましたか?

//編集:
私の望みはこれを自動的に行うことです!->開く、保存する、またはオンザフライ
誰でも方法を知っていますか?


私はこれを試しました

import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  # Run ST's 'expand_tabs' command when saving a file
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

そして、これが私のユーザー設定です:

{
    "auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",
    "auto_indent": true,
    "detect_indentation": true,
    "draw_white_space": "all",
    "ensure_newline_at_eof_on_save": true,
    "expand_tabs_on_save": true,
    "font_face": "SourceCodePro-Regular",
    "font_size": 10,
    "format_on_save": true,
    "ignored_packages":
    [
        "Vintage"
    ],
    "indent_to_bracket": true,
    "open_files_in_new_window": false,
    "smart_indent": true,
    "tab_size": 4,
    "translate_tabs_to_spaces": false,
    "trim_automatic_white_space": true,
    "trim_trailing_white_space_on_save": true,
    "use_tab_stops": false,
    "word_wrap": false
}

あなたが投稿したプラグインは、実際にはST3のビルド3059で正常に機能しています。コンソールを開いて、Ctrl + ~プラグインエラーが発生していないか確認できますか?また、Package ControlがインストールExpandTabsOnSaveされている場合、インストールされているプラ​​グインとして表示されているかどうかを確認できますか?
アンガーソン2014年

クレイジーなものはインストールされているようで(リストパッケージの下にリストされています)、コンソールにエラーが見つかりません:-(
chris

print("debug")プラグインを追加するか、プラグインに類似したものを試して、保存時に実行されているかどうかを確認します。
アンガーソン2014年

Omg、その作品!Windowsマシン上の間違ったディレクトリでした、パッケージはuser /.../ AppData / Roaming / SublimeText3 / Packagesにリストされていますありがとうございます!
chris

コマンドを実行する前に、そのビューをウィンドウのアクティブビューとして設定してください。可能性は低いかもしれませんが、投稿したときに、保存しようとしているページとは異なるページのタブが展開される可能性があります。フォーカスビューでも、間違ったファイルに保存される可能性はあると思いますが、少なくともリスクを最小限に抑えることができます。
skuroda 2014年

回答:


376

Sublime Textウィンドウの右下隅に、次のようなインデントインジケーターが表示されます。

インデントオプションメニュー

それをクリックすると、インデントの設定を調整するためのオプションを含むメニューが開きますConvert Indentation to Tabs/Spaces。さらに重要なのはです。

ここに画像の説明を入力してください

同じメニューがにリストされていView -> Indentationます。


42
はい、知っています。私の望みはこれを自動的に作ることです...何かアイデアはありますか?
chris

2
@chrisツああ。質問を再フォーマットして、それをより明確にすることができますか?あなたの意味を逃したので、他の人もそうかもしれません。
アンガーソン2014年

ステータスバーが下部にありません。どうすれば取得できますか?
ジオイデシック2017

1
そして、これはファイル全体に対して行われ、選択に対してのみ行うことできません
not2qubit

非常に素晴らしい。また、「command-a」ですべてを選択し、「command- [」でインデントを解除してから、「edit> line> reindent」でファイルを修正しました。これはマクロに組み込むことができると確信しています。
Brooks DuBois 2018年

130

Sublimeウィンドウの下部に、タブ/スペース設定を表すものが表示されます。

次に、多数のオプションが含まれるドロップダウンが表示されます。気になるオプションは次のとおりです。

  • インデントをスペースに変換
  • インデントをタブに変換

ドキュメント全体に必要な設定を適用します。

お役に立てれば。


2
これがロード時に自動的に行われることを願っています...私が開くすべてのファイルに対して。つまり、インデントスペースからタブへの変換です。ロード時に自動的に実行されます:-)
Filip OvertoneSinger Rydlo

1
聞いた 私はタブが好きですが、なぜ多くのコードがスペースで書かれているのか理解しています。スペースがあれば、IDE間に矛盾はありません-スペースはスペースです。タブはIDE間の可変数のスペースを占め、コードを奇妙に見せることがあります。
erier 2016

こんにちは@Green-それについて何がうまくいかないのですか?これでうまく
いき

80

すでにご存知かもしれませんが、インデント設定はPreferences.sublime-settingsでカスタマイズできます。次に例を示します。

"detect_indentation": true,
"tab_size": 4,
"translate_tabs_to_spaces": false

これにより、エディターは4スペース幅のタブを使用するように設定され、Sublimeが編集中のファイルのインデントと一致するようにするデフォルトの動作をオーバーライドします。これらの設定では、ファイルを再度インデントすると、スペースがタブで置き換えられます。

ファイルを開いたときに自動的にインデントを再設定する限り、これはそれほど簡単ではありません(ただし、空白はファイルの差分で大混乱を引き起こすため、おそらく良い考えではありません)。より適切な方法は何ですか?再インデントのショートカットをマップし、修正が必要な新しいファイルを開いたときにそれをトリガーすることができます。


13

コマンドパレットを使用して、この問題を解決できます。

ステップ1: Ctrl + Shift + Pコマンドパレットをアクティブにする)

ステップ2:「インデント」と入力して選択 "Indentation: Convert to Tabs"


1
優れた。ありがとうございました。
RJ

最良のソリューション。ありがとう!
マシューK

7

私の場合、この行は問題を解決しました:

"translate_tabs_to_spaces": false

4

これは、ファイルを開くたびに自動的にタブに変換するソリューションです。

このファイルを作成します.../Packages/User/on_file_load.py::

import sublime
import sublime_plugin

class OnFileLoadEventListener(sublime_plugin.EventListener):

    def on_load_async(self, view):
        view.run_command("unexpand_tabs")

注意。実際のスペースからタブへの変換が行われなかった場合でも、ファイルを開いた後、ファイルは保存されていない状態になります。


私はあなたが意味するものだと思い.../Packages/User/on_file_load.pyません、.php
Pranav Nutalapati

@PranavNutalapatiそれをキャッチしてくれてありがとう。
TheStoryCoder 2018

そうだね。問題ない。
Pranav Nutalapati 2018

on_load代わりに試してくださいon_load_async
PedroGóes18年

3

保存時にスペースを自動的にタブ変換するには、「$ SUBLIME_HOME $ \ Packages \」内の「UnexpandTabsOnSave」という新しく作成されたサブフォルダーに次のPythonスクリプトを追加します。

import sublime, sublime_plugin, os

class ConvertSpacesToTabsOnSave( sublime_plugin.EventListener ):
  # Run Sublime's 'unexpand_tabs' command when saving any file
  def on_pre_save( self, view ):
    view.window().run_command( 'unexpand_tabs' )

最初のリソースをありがとうございます。


0

次の方法で、すべてのプロジェクトファイルでタブをスペースに置き換えることができます。

  1. すべてを置換する Ctrl+Shif+F
  2. 正規表現検索を設定する ^\A(.*)$
  3. ディレクトリをに設定 Your dir
  4. 置き換え \1

    ここに画像の説明を入力してください

  5. これにより、すべてのプロジェクトファイルが開かれ、バッファがダーティとしてマークされます。これにより、オプションでこれらの次のSublime Text設定を有効にして、すべてのファイルの末尾の空白をトリミングし、すべてのファイルの最後に新しい行を確保できます。

    メニューPreferences -> Settingsからこれらのコンテンツを設定ファイルに追加することで、これらの設定を有効にすることができます。

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. メニューに移動してSublime Textコンソールを開き、View -> Show Console (Ctrl+`)次のコマンドを実行します。 import threading; threading.Thread( args=(set(),), target=lambda counterset: [ (view.run_command( "expand_tabs", {"set_translate_tabs": True} ), print( "Processing {:>5} view of {:>5}, view id {} {}".format( len( counterset ) + 1, len( window.views() ), view.id(), ( "Finished converting!" if len( counterset ) > len( window.views() ) - 2 else "" ) ) ), counterset.add( len( counterset ) ) ) for view in window.views() ] ).start()
  7. 次に、メニューに移動して、変更されたすべてのファイルを保存します File -> Save All

0

Macを使用している場合は、ヘルプオプション(通常はMacのメニューバーの最後のオプション)を使用して、「タブインデント」と入力し、タブインデントの幅を選択します。

しかし、一般的には、このパスに従うことができます:ビュー->インデント



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.