崇高なテキスト2:オンデマンドで末尾の空白を削除する


99

Sublime Text 2は、保存時にファイルの末尾の空白を削除できることを知っています。

チームで作業してファイルへの変更をコミットする場合、これは巨大なdiffを生成する傾向があり、ピアコードのレビューがより面倒になります。そのため、とにかくファイルに大きな変更をコミットするときにのみ空白のクリーニングを実行し、マイナーな変更のために空白を残しておくことを好みます。

ファイルに必要に応じて空白のトリミングを実行するためのコマンドが他にあるかどうかを知りたいのですが"Activate trimming on save > Save file > Deactivate trimming"

ドキュメントとstackoverflowを検索しても関連するものは何も表示されず、すべてのリンクが保存時の自動トリミングについて話しているようです。


1
これはあなたの質問に直接答えるものではありませんが、バージョン管理にGitを使用している場合は役立つかもしれません。$ mv .git/hooks/pre-commit.sample .git/hooks/pre-commit私はこのブログから入手しました
ポールフィオラヴァンティ2012

97
:非オンデマンドの方法は、この設定を追加することです:仲間のGooglerのために"trim_trailing_white_space_on_save": true
ネイト・グレン・

3
@Nate Glennのコメントの強化として、Markdownから空白を削除すると問題が発生する可能性があることに注意してください。Markdown.sublime-settings保存時にグローバルトリムを編集して無効にし、事故を防ぐことができます。
tehfoo 2013

重要:{}括弧の間に複数の行がある場合は、上の行に「、」を入れてください。そうしないと、保存しようとするとエラーが発生します。
slindsey3000 2014年

1
「チームで作業し、ファイルへの変更をコミットするとき、これは巨大なdiffを生成する傾向があり、ピアコードのレビューをより面倒にします。」理想的には、それがあなたがほのめかしているような汚いパッチを作成するからです。コーディング標準の末尾の空白を禁止し、リンター/コミットフックで不正な空白を含むコミットをキャッチします。
Frank Farmer

回答:


71

注意:このプラグイン使用すると、Sublime Textが大幅に遅くなります

これにはTrailingSpacesプラグインを使用します。

末尾のスペースをハイライト表示して、すぐに削除します。

ST2は、ファイルの保存時に末尾のスペースを自動的に削除する方法を提供します。設定によっては、それらを強調表示したり、手動で削除したりする方が便利な場合があります。このプラグインはまさにそれを提供します!

使用法:「編集/末尾のスペース/削除」をクリックします。

キーバインディングを追加するには、「設定/キーバインディング-ユーザー」を開き、以下を追加します。

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }

1
ええ、私はこの答えが一番好きです...安全にアップグレード+うまくいく-ありがとう
ロブ

1
このプラグインをインストールした後、単語を検索するためのctrl + F機能が遅くなることに気付いたので、このプラグインを削除しました。同じ状況が発生したかどうかを教えてください。
dennisbot 2013

Ctrl + Shift + Tは、すでにSublimeで最後に閉じたタブを開くために使用されます。だから私はCtrl + Alt + Tを好む
Pawel

5
呼ばれるオプションがありtrailing_spaces_trim_on_saveますが、に設定することができ、true中にはPreferences > Package Settings > Trailing Spaces > Settings - User。キーボードショートカットをバインドする代わりにこれを使用できます。自分のニーズに適していると思います
dspacejs '28

警告:このプラグインをインストールすると、大きなファイルのスクロールが大幅に遅くなります。
compie 2016

66

Sublime Text内で迅速なオンデマンドソリューションを実現するために、以下の手順を使用します。

  1. 検索>置換...
  2. 何を見つける: [ \t]+\n
  3. と置換する: \n
  4. すべてを置き換える

次のようにして、ファイルの大きなセットに対してこれを行うこともできます

  1. 検索>ファイルから検索...
  2. 検索: [ \t]+\n
  3. どこ:
  4. 交換: \n
  5. 交換する

5
この方法は、最後の行を除くすべての行で機能します。
Joncom 2014年

1
@Joncomは最後の行については正しいです。Sublime Text 3では、\tはスペースに一致しないように見えるので、書かれた答えは末尾のタブのみを削除します。私は好きだと思います\s+\nが、空白行も削除されることに注意してください。最終行の空白も削除したい場合は\s+\z、次のように追加できます(\s+\n|\s+\z)
canhascodez 2017年

3
([\t ]+\n|\s+\z)<-空白行は削除されません。
canhascodez 2017年

4
正しい正規表現が存在[ \t]+$し、何もないものに置き換える必要があります。
Codesmith、2018

27

正規表現を使用して、末尾の空白を削除できます。

  1. 検索>置換...
  2. 何を見つける: [^\S\r\n]+$
  3. 置換:空のままにします。
  4. [すべて置換]をクリックします

[^\S\r\n]+$ある正規表現がために「は、少なくとも1つの空白文字(二重否定を使用してそのスペースやタブではなく、改行は、)行の末尾に続きます」

正規表現を有効にする必要があります。 正規表現を有効にすることは検索ダイアログです


22

プラグインや設定を使用せず、ほとんどの状況で機能する非常に簡単な方法を次に示します。

  1. 複数選択してカーソルを各行の終わりに移動
  2. Ctrl-Shiftを押しながら左、右を押す
  3. 行末のスペースとタブが選択されているはずです。DeleteキーまたはBackspaceキーを押します

    -この時点では、(や+などの特殊文字も、スペースだけでなく、行末で選択できます。

すべての行を複数選択する方法:

1つの方法は、マウスの中央キーを使用して垂直方向に選択し、小さい選択の場合は終了キーを押すことです。

ホットキーあり:

  1. CTRL-A(すべて選択)
  2. CTRL-SHIFT-L(選択したすべての行にカーソルを置きます)
  3. END(行末に移動)

また、関数findを使用して、スペース文字など、すべての行にあるものを見つけることもできます。

  1. \ s(正規表現を使用)
  2. [すべて検索]をクリックします
  3. 「End」キーを押すと、各行の終わりに複数のカーソルが表示されます

サンプルテキスト:

text and number     44  more text and a space  
text and number 44  more text and 2 tabs        
text and number 44  more text and no space or tab

text and number 44  more text after a line feed

2
注:マルチカーソルが最後の位置にあるすべての行を強調表示するには、CTRL + A、CTRL + SHIFT + L、ENDの順に押します。
Richard Marskell-Drackir 2013年

2
他のデータセットでこの手法を使用すると、完璧ではないことがわかりました。Sublime Textは、末尾のスペースとともに、)や+などの特殊文字も強調表示します。一部のデータが特殊文字で終わっている場合は注意してください。
shanemgrey 2013

2
また、\s正規表現のFYI は、スペース文字だけでなく、スペースだけでなくタブや改行(「空白」)にも一致します。:)
Richard Marskell-Drackir 2013

13

ここで解決策を見つけました:http ://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

パッケージを変更できます

trim_trailing_white_space.py

これは、デフォルトのパッケージディレクトリにあります。

import sublime, sublime_plugin

def trim_trailing_white_space(view):
    trailing_white_space = view.find_all("[\t ]+$")
    trailing_white_space.reverse()
    edit = view.begin_edit()
    for r in trailing_white_space:
        view.erase(edit, r)
    view.end_edit(edit)

class TrimTrailingWhiteSpaceCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        trim_trailing_white_space(self.view)

class TrimTrailingWhiteSpace(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("trim_trailing_white_space_on_save") == True:
            trim_trailing_white_space(view)

class EnsureNewlineAtEof(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("ensure_newline_at_eof_on_save") == True:
            if view.size() > 0 and view.substr(view.size() - 1) != '\n':
                edit = view.begin_edit()
                view.insert(edit, view.size(), "\n")
                view.end_edit(edit)

これで、コマンドをキーマップ構成に追加できます。

{ "keys": ["your_shortcut"], "command": "trim_trailing_white_space" }

私にとって最良の解決策は、単にこれを行うだけのプラグインを追加したくないことです。ありがとう。
puro_nervio 2014年

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