【问题标题】:Sublime Text 2: Trim trailing white space on demandSublime Text 2:按需修剪尾随空白
【发布时间】:2012-08-31 02:26:10
【问题描述】:

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

在团队中工作并对文件进行更改时,这往往会产生巨大的差异,从而使同行代码审查更加麻烦。出于这个原因,我更喜欢只在我对文件进行重大更改时才进行空白清理,而将空白保留为用于微小更改。

我想知道除了"Activate trimming on save > Save file > Deactivate trimming"之外,是否有任何命令可以on demand对文件执行空格的修剪。

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

【问题讨论】:

  • 这并不能直接回答您的问题,但如果您使用 Git 进行版本控制,它可能会有所帮助:$ mv .git/hooks/pre-commit.sample .git/hooks/pre-commit,我从 this blog 获得。
  • 对于 Google 同事:非按需方式是添加此设置:"trim_trailing_white_space_on_save": true
  • 作为对@Nate Glenn 评论的增强,请注意,从 Markdown 中修剪空白可能会给您带来麻烦,特别是如果您修剪其他人的故意空白并在不注意的情况下提交它。您可以编辑Markdown.sublime-settings 并在保存时禁用全局修剪并防止发生意外。
  • 重要提示:如果 { } 大括号之间的行数超过 1 行,请确保在上面的行中添加一个“,”,否则在尝试保存时会出现错误。
  • “当在团队中工作并对文件进行更改时,这往往会产生巨大的差异,这使得同行代码审查更加麻烦”这里更深层次的问题是不应该使用尾随空格提交理想情况下,首先进入回购 - 正是因为它创建了你提到的那种脏补丁。在你的编码标准中禁止尾随空格,并在你的 linter/commit 钩子中捕获带有错误空格的提交。

标签: whitespace sublimetext2 code-cleanup


【解决方案1】:

此方法并不完美,但不使用插件或设置,并且适用于大多数情况。

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

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

如何多选所有行:

一种方法是使用鼠标中键垂直选择,如果是小选择,请按结束键。

使用热键:

  1. CTRL-A(全选)
  2. CTRL-SHIFT-L(将光标放在所有选中的行上)
  3. END(转到行尾)

您还可以使用 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

【讨论】:

  • 注意:要突出显示最后位置带有多光标的所有行,您可以使用 CTRL+A 后跟 CTRL+SHIFT+L 后跟 END。
  • 在其他数据集上使用这种技术,我发现它并不完美。 Sublime Text 还将突出显示特殊字符,例如 ) 和 + 以及尾随空格。如果某些数据以特殊字符结尾,请小心。
  • 另外,正则表达式中的仅供参考 \s 不仅匹配空格字符,还匹配制表符和换行符(即“空白”),而不仅仅是空格。 :)
【解决方案2】:

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

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

[^\S\r\n]+$Regex 表示“至少一个空格字符(所以空格和制表符,但不是换行符,使用双重否定),然后是行尾”

必须启用正则表达式:

【讨论】:

  • 红色大箭头加分。我已经使用 Sublime 八年了,但不知何故我错过了。
【解决方案3】:

注意:使用这个插件makes Sublime Text significantly slower

我为此使用TrailingSpaces 插件。

突出显示尾随空格并立即将其删除。

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

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

要添加键绑定,请打开“Preferences / Key Bindings - User”并添加:

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

【讨论】:

  • 是的,我最喜欢这个答案...升级安全 + 正常工作 - 谢谢
  • 我注意到安装这个插件后ctrl + F 找词的功能变慢了,所以我把它删除了,你能告诉我你是否也有同样的情况吗?。跨度>
  • Ctrl + Shift + T 已用于在 Sublime 中打开最后关闭的选项卡。所以我更喜欢 Ctrl + Alt + T
  • 有一个选项叫trailing_spaces_trim_on_save,可以在Preferences > Package Settings > Trailing Spaces > Settings - User中设置为true。您可以使用它而不是绑定键盘快捷键,我发现它更适合我的需求
  • 警告:安装此插件后,滚动浏览大文件会明显变慢。
【解决方案4】:

我使用这些步骤在 Sublime Text 中快速按需解决方案:

  1. 查找 > 替换...
  2. 查找内容:[ \t]+\n
  3. 替换为:\n
  4. 全部替换

您也可以通过

对大量文件执行此操作
  1. 查找 > 在文件中查找...
  2. 查找:[ \t]+\n
  3. 地点:
  4. 替换:\n
  5. 替换

【讨论】:

  • 此方法适用于除最后一行之外的所有行。
  • @Joncom 关于最后一行是正确的。在 Sublime Text 3 中,\t 似乎与空格不匹配,因此所写的答案仅删除了尾随制表符。我想我更喜欢\s+\n,但请注意它也会删除空行。如果您还想删除最后一行的空格,您可以添加\s+\z,如下所示:(\s+\n|\s+\z)
  • ([\t ]+\n|\s+\z)
  • 正确的正则表达式应该是[ \t]+$ 并用空替换它。
  • 不要忘记您需要将查找替换选项设置为正则表达式才能正常工作。
【解决方案5】:

我在这里找到了一个解决方案: 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" }

【讨论】:

  • 对我来说最好的解决方案,我不想添加一个插件来简单地做到这一点。谢谢。
  • 对我来说这是完美的解决方案,谢谢
猜你喜欢
  • 2012-08-07
  • 2011-01-16
  • 2023-04-08
  • 2012-08-14
  • 1970-01-01
  • 2012-06-22
  • 2014-05-07
  • 2010-11-26
  • 1970-01-01
相关资源
最近更新 更多