Sublime Text 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что я получил из этого блога .
Пол Фиораванти,
97
Для других гуглеров: не требующий запроса способ - добавить этот параметр:"trim_trailing_white_space_on_save": true
Нейт Гленн,
3
В качестве улучшения комментария @Nate Glenn обратите внимание, что обрезка пробелов из Markdown может вызвать у вас проблемы, особенно если вы обрежете намеренно чужое пустое пространство и зафиксируете его, не заметив. Вы можете отредактировать Markdown.sublime-settingsи отключить глобальную обрезку при сохранении и предотвратить сбои.
tehfoo
ВАЖНО: Если между фигурными скобками {} больше одной строки, убедитесь, что вы поставили "," в строке выше, иначе вы получите сообщение об ошибке при попытке сохранить.
slindsey3000
1
«Когда вы работаете в команде и вносите изменения в файл, это приводит к огромным разницам, которые затрудняют проверку партнерского кода». Более глубокая проблема здесь заключается в том, что коммиты с завершающими пробелами не должны попадать в репо, в первую очередь, в идеале - именно потому, что он создает грязные пятна, на которые вы намекаете. Запретите завершающие пробелы в ваших стандартах кодирования и перехватите коммиты с плохими пробелами в ваших перехватчиках линтера / фиксации.
Фрэнк Фармер

Ответы:

71

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

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

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

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

Использование: нажмите «Изменить / Завершающие пробелы / Удалить».

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

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }
Шридхар Катакам
источник
1
Да, мне больше всего нравится этот ответ ... обновление безопасно + просто работает - спасибо
Роб
1
Я заметил, что функция поиска слов ctrl + F становится медленной после того, как я установил этот плагин, поэтому я удалил его, вы можете сказать мне, случится ли с вами такая же ситуация?
dennisbot 05
Ctrl + Shift + T используется для открытия последней закрытой вкладки в Sublime. Поэтому я предпочитаю Ctrl + Alt + T
Павел
5
Есть опция trailing_spaces_trim_on_save, которую вы можете установить trueв Preferences > Package Settings > Trailing Spaces > Settings - User. Вы можете использовать это вместо привязки сочетания клавиш, я считаю, что это лучше для моих нужд
dspacejs
Предупреждение: с установленным плагином прокрутка больших файлов становится значительно медленнее.
compie
68

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

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

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

  1. Найти> Найти в файлах ...
  2. Найти: [ \t]+\n
  3. Куда:
  4. Заменить: \n
  5. Заменить
Джейсон Фэворс
источник
5
Этот метод работает для всех строк, кроме последней.
Joncom
1
@Joncom прав насчет последней строки. В Sublime Text 3 \tпробелы, похоже, не совпадают, поэтому ответ в том виде, в котором он написан, удаляет только завершающие вкладки. Я думаю, что предпочитаю \s+\n, но обратите внимание, что он также удаляет пустые строки. Если вы хотите удалить пробелы в последней строке, а вы можете добавить в \s+\zкачестве так: (\s+\n|\s+\z).
canhascodez
3
([\t ]+\n|\s+\z)<- не удаляет пустые строки.
canhascodez
4
Правильное регулярное выражение должно быть [ \t]+$и заменять его ничем.
Codesmith 05
28

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

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

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

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

анту
источник
22

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

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

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

Как выбрать несколько строк:

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

С помощью горячих клавиш:

  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
Shanemgrey
источник
2
Примечание. Чтобы выделить все строки с мульти-курсором в последней позиции, вы можете использовать CTRL + A, затем CTRL + SHIFT + L, а затем END.
Ричард Марскелл - Drackir
2
Используя этот метод для других наборов данных, я обнаружил, что он не идеален. Sublime Text также выделяет специальные символы, такие как) и +, а также конечные пробелы. Будьте осторожны, если некоторые данные оканчиваются специальными символами.
shanemgrey
2
Кроме того, FYI \sв регулярном выражении не только соответствует символу пробела, но также табуляциям и новым строкам (т.е. «пробелам»), а не только пробелам. :)
Ричард Марскелл - Drackir
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
Для меня это идеальное решение,
спасибо