崇高文字2:按需修剪尾随空白


99

我知道Sublime Text 2可以在保存时删除文件上的尾随空白。

在团队中工作并提交对文件的更改时,这往往会产生巨大的差异,这会使对等代码审阅更加麻烦。因此,我更喜欢只在对文件进行大量更改时才进行空白清理,而对于较小的更改则保留空白。

我想知道除以外,是否有任何命令可按需对文件执行空白修剪"Activate trimming on save > Save file > Deactivate trimming"

在文档中和stackoverflow上搜索均未显示任何相关内容,所有链接似乎都在谈论保存时的自动修整。


1
这并不能直接回答您的问题,但是如果您使用Git进行版本控制,则可能会有所帮助:$ mv .git/hooks/pre-commit.sample .git/hooks/pre-commit这是我从本博客获得的
Paul Fioravanti 2012年

97
对于其他Google员工:非按需的方式是添加以下设置:"trim_trailing_white_space_on_save": true
Nate Glenn

3
作为@Nate Glenn的评论的增强,请注意,从Markdown修剪空白可能会给您带来麻烦,尤其是如果您修剪别人的有意空白并在没有引起注意的情况下提交它。您可以Markdown.sublime-settings在保存时编辑和禁用全局修剪,以防止发生事故。
tehfoo 2013年

重要说明:如果{}括号之间有多于一行,请确保在上面的行中加上“,”,否则在尝试保存时会出现错误。
slindsey3000 2014年

1
“在团队中工作并提交对文件的更改时,这往往会产生巨大的差异,这会使对等代码审查更加麻烦。”这里的更深层问题是,尾随空白的提交不应首先放在回购中,理想情况下-正是因为它会产生您所暗示的脏补丁。在您的编码标准中禁止尾随空格,并在linter / commit钩子中捕获包含错误空格的提交。
Frank Farmer

Answers:


71

当心:使用此插件会使Sublime Text变慢

我为此使用TrailingSpaces插件。

突出显示尾随空格,并立即删除它们。

ST2提供了一种在保存文件时自动删除尾随空格的方法。根据您的设置,仅突出显示和/或手动删除它们可能更方便。这个插件提供了!

用法:单击“编辑/尾随空格/删除”。

要添加键绑定,请打开“首选项/键绑定-用户”并添加:

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

1
是的,我最喜欢这个答案...升级安全+正常-谢谢
Rob

1
我注意到安装此插件后,按ctrl + F键查找单词的功能变慢,因此我将其删除了,您能告诉我是否遇到相同的情况吗?
dennisbot

Ctrl + Shift + T已用于在Sublime中打开最后一个关闭的选项卡。所以我更喜欢Ctrl + Alt + T
Pawel 2014年

5
有所谓的一个选项trailing_spaces_trim_on_save,您可以设置为truePreferences > Package Settings > Trailing Spaces > Settings - User。您可以使用它代替绑定键盘快捷键,我发现它可以更好地满足我的需求
dspacejs 2015年

警告:安装此插件后,滚动浏览大文件的速度明显变慢。
compie

67

我将这些步骤用于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

3
([\t ]+\n|\s+\z)<-不删除空白行。
canhascodez

4
正确的正则表达式应该是[ \t]+$,什么也不要替换。
Codesmith

27

您可以简单地使用正则表达式删除尾随空格:

  1. 查找>替换...
  2. 找什么: [^\S\r\n]+$
  3. 替换为:留空。
  4. 点击“全部替换”

[^\S\r\n]+$是正则表达式,用于“至少一个空格字符(所以空格和制表符,但不包括换行符,使用双重否定),后跟行尾”

必须启用正则表达式: 启用正则表达式为搜索对话框


22

这是一种非常简单的方法,它不使用插件或设置,并且在大多数情况下都可以使用。

  1. 多选并将光标移动到每一行的末尾
  2. 按住CTRL-Shift并按向左,向右
  3. 现在应该选择行尾的空格和制表符。按Delete或Backspace

    注意 -此时,也可以在行尾选择特殊字符,例如(和+,而不仅仅是空格。

如何多选所有行:

一种方法是使用鼠标中键垂直选择,然后在选择范围较小时按结束键。

使用热键:

  1. CTRL-A(全选)
  2. CTRL-SHIFT-L(将光标置于所有选定的行上)
  3. 结束(转到行尾)

您还可以使用find函数查找将出现在每一行中的内容,例如空格字符:

  1. \ s(使用正则表达式)
  2. 单击查找全部
  3. 按下“结束”键可在每一行的末尾获得多个光标

示例文本:

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。
理查德·马斯克

2
在其他数据集上使用此技术,我发现它并不完美。Sublime Text还将突出显示特殊字符,例如)和+以及尾随空格。请注意某些数据是否以特殊字符结尾。
shanemgrey

2
另外,\s正则表达式中的FYI 不仅匹配空格字符,而且还匹配制表符和换行符(即“空白”),而不仅仅是空格。:)
理查德·马斯克

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.