Sublime Text 2: обрезать конечный пробел по требованию

Я знаю, что Sublime Text 2 может удалять конечные пробелы в файлах при сохранении.

Когда вы работаете в команде и вносите изменения в файл, это приводит к огромным различиям, которые делают экспертную оценку кода более громоздкой. По этой причине я предпочитаю очищать пробелы только тогда, когда я все равно вношу огромные изменения в файл, и оставляю пробелы как есть для незначительных изменений.

Я хотел бы знать, есть ли какая-либо команда для выполнения обрезки пробелов по запросу в файле, кроме "Activate trimming on save > Save file > Deactivate trimming".

Поиск в документации и в stackoverflow не показал ничего подходящего, все ссылки, кажется, говорят об автоматической обрезке при сохранении.


person José Luis    schedule 06.09.2012    source источник
comment
Это не дает прямого ответа на ваш вопрос, но может помочь, если вы используете Git для контроля версий: $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commit, который я получил от этот блог.   -  person Paul Fioravanti    schedule 06.09.2012
comment
Для коллег-гуглеров: можно добавить этот параметр не по требованию: "trim_trailing_white_space_on_save": true   -  person Nate Glenn    schedule 07.05.2013
comment
В качестве улучшения для комментария @Nate Glenn обратите внимание, что обрезка пробелов из Markdown может вызвать у вас проблемы, особенно если вы обрезаете чье-то преднамеренное пробелы и фиксируете это, не замечая этого. Вы можете отредактировать Markdown.sublime-settings и отключить глобальную обрезку при сохранении и предотвратить сбои.   -  person tehfoo    schedule 03.12.2013
comment
ВАЖНО! Если между фигурными скобками { } находится более 1 строки, убедитесь, что вы поставили ',' в строке выше, иначе вы получите сообщение об ошибке при попытке сохранения.   -  person slindsey3000    schedule 20.11.2014
comment
При работе в команде и внесении изменений в файл это приводит к огромным различиям, которые делают одноранговую проверку кода более громоздкой. Более глубокая проблема здесь заключается в том, что коммиты с конечным пробелом не должны попадать в репо в первую очередь, в идеале - - именно потому, что это создает грязные пятна, о которых вы говорите. Запретите завершающие пробелы в ваших стандартах кодирования и отлавливайте коммиты с неверными пробелами в линтере/перехватчиках коммитов.   -  person Frank Farmer    schedule 30.03.2019


Ответы (5)


Осторожно: использование этого плагина значительно замедляет работу Sublime Text

Для этого я использую плагин TrailingSpaces.

Выделяйте конечные пробелы и мгновенно удаляйте их.

ST2 позволяет автоматически удалять конечные пробелы при сохранении файла. В зависимости от ваших настроек может быть удобнее просто выделить их и/или удалить вручную. Этот плагин обеспечивает именно это!

Использование: нажмите «Редактировать / Конечные пробелы / Удалить».

Чтобы добавить привязку клавиш, откройте «Настройки / Привязки клавиш — Пользователь» и добавьте:

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }
person Sridhar Katakam    schedule 10.09.2012
comment
Да, мне больше всего нравится этот ответ ... обновление безопасно + просто работает - спасибо - person Rob; 05.02.2013
comment
Я заметил, что функция Ctrl + F для поиска слов становится медленной после того, как я установил этот плагин, поэтому я удалил его, можете ли вы сказать мне, случается ли с вами такая же ситуация? - person dennisbot; 05.07.2013
comment
Ctrl + Shift + T уже используется для открытия последней закрытой вкладки в Sublime. Поэтому я предпочитаю Ctrl + Alt + T - person Pawel; 08.07.2014
comment
Существует параметр trailing_spaces_trim_on_save, который можно установить на true в Preferences > Package Settings > Trailing Spaces > Settings - User. Вы можете использовать это вместо привязки сочетания клавиш, я считаю, что это лучше для моих нужд - person dspacejs; 28.11.2015
comment
Предупреждение: при установке этого плагина прокрутка больших файлов становится значительно медленнее. - person compie; 19.07.2016

Я использую эти шаги для быстрого решения по запросу в Sublime Text:

  1. Найти > Заменить...
  2. Найти что: [ \t]+\n
  3. Заменить на: \n
  4. Заменить все

Вы также можете сделать это для большого набора файлов через

  1. Найти > Найти в файлах...
  2. Найти: [ \t]+\n
  3. Где:
  4. Заменить: \n
  5. Заменить
person Jason Favors    schedule 15.10.2013
comment
Этот метод работает для всех строк, кроме последней. - person Joncom; 22.10.2014
comment
@Joncom прав насчет последней строки. В Sublime Text 3 \t, похоже, не соответствует пробелам, поэтому ответ, как написано, удаляет только конечные табуляции. Я думаю, что предпочитаю \s+\n, но обратите внимание, что он также удаляет пустые строки. Если вы хотите удалить пробелы и в последней строке, вы можете добавить \s+\z следующим образом: (\s+\n|\s+\z). - person Kaia Leahy; 27.01.2017
comment
([\t ]+\n|\s+\z) ‹-- не удаляет пустые строки. - person Kaia Leahy; 27.01.2017
comment
Правильное регулярное выражение должно быть [ \t]+$ и ничего не заменять. - person Codesmith; 05.02.2018

Вы можете просто использовать регулярное выражение для удаления конечных пробелов:

  1. Найти > Заменить...
  2. Найдите что: [^\S\r\n]+$
  3. Заменить на: оставить пустым.
  4. Нажмите «Заменить все».

[^\S\r\n]+$ - это Regex для «по крайней мере одного пробельного символа (то есть пробелов и табуляции, но не новой строки, с использованием двойного отрицания), за которым следует конец строки»

Регулярное выражение должно быть включено: Включить регулярное выражение в диалоговом окне поиска

person antou    schedule 24.10.2016
comment
Дополнительные очки за большую красную стрелку. Я использую Sublime уже восемь лет и как-то пропустил это. - person Dustin Oprea; 12.03.2021

Вот очень простой способ, который не требует плагинов или настроек и работает в большинстве ситуаций.

  1. Множественный выбор и перемещение курсора в конец каждой строки
  2. Удерживая CTRL-Shift, нажмите влево, вправо
  3. Пробелы и табуляции в конце строк теперь должны быть выделены. Нажмите Удалить или Backspace

    Примечание. Специальные символы, такие как ( и +, также могут быть выбраны в конце строки в этой точке, а не только пробелы.

Как сделать множественный выбор всех строк:

Один из способов — использовать среднюю клавишу мыши для выбора по вертикали, а затем нажать клавишу «Конец», если выделение небольшое.

С горячими клавишами:

  1. CTRL-A (выбрать все)
  2. CTRL-SHIFT-L (поместите курсор на все выделенные строки)
  3. END (Перейти к концу строки)

Вы также можете использовать функцию поиска, чтобы найти что-то, что будет в каждой строке, например пробел:

  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
person shanemgrey    schedule 08.05.2013
comment
Примечание. Чтобы выделить все строки с мультикурсором в последней позиции, вы можете использовать CTRL+A, затем CTRL+SHIFT+L, а затем END. - person Richard Marskell - Drackir; 04.06.2013
comment
Используя эту технику на других наборах данных, я обнаружил, что она не идеальна. Sublime Text также выделяет специальные символы, такие как ) и +, а также завершающие пробелы. Будьте осторожны, если некоторые данные заканчиваются специальными символами. - person shanemgrey; 24.07.2013
comment
Кроме того, FYI \s в регулярном выражении соответствует не только символу пробела, но также табуляции и новым строкам (то есть пробелам), а не только пробелам. :) - person Richard Marskell - Drackir; 24.07.2013

Я нашел решение здесь: 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" }
person Riccardo Marotti    schedule 06.09.2012
comment
Лучшее решение для меня, я не хочу добавлять плагин просто для этого. Спасибо. - person puro_nervio; 31.10.2014
comment
Для меня это идеальное решение, спасибо - person Vikrame; 13.07.2017