Піднесений текст 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
Для колег Googlers: не вимагаючий спосіб додати цей параметр:"trim_trailing_white_space_on_save": true
Nate Glenn

3
Як доповнення до коментаря @Nate Glenn, зауважте, що обрізка пробілів від Markdown може привести вас до неприємностей, особливо якщо ви обрізаєте чужий навмисний білий простір і виконайте це, не помічаючи. Ви можете редагувати Markdown.sublime-settingsта вимикати глобальну обробку при збереженні та запобіганні випадків.
tehfoo

ВАЖЛИВО: Якщо між {} дужками розміщено більше 1 рядка, переконайтеся, що ви поставили "," на рядок вище, або ви отримаєте помилку при спробі збереження.
slindsey3000

1
"Працюючи в команді і вносячи зміни до файлу, це призводить до появи великих відмінностей, які роблять перегляд коду однолітків більш громіздким". Більш глибока проблема тут полягає в тому, що пробіл пробілу не повинен перетворювати його в репо-перше, в ідеалі - саме тому, що це створює такі брудні плями, які ви натякаєте. Забороніть пробіл пробілів у ваших стандартах кодування, а також ловіть місця з поганими пробілами у ваших гачках ліній / фіксування.
Френк Фермер

Відповіді:


71

Остерігайтеся: використання цього плагіна робить Sublime Text значно повільнішим

Для цього я використовую плагін TrailingSpaces .

Виділіть пробіли та видаліть їх спалахом.

ST2 забезпечує спосіб автоматичного видалення пробілів після збереження файлу. Залежно від ваших налаштувань, може бути зручніше просто виділити їх та / або видалити їх вручну. Цей плагін забезпечує саме це!

Використання: натисніть "Редагувати / відстежувати пробіли / видалити".

Щоб додати прив'язку клавіш, відкрийте "Налаштування / Прив'язки клавіш - Користувач" та додайте:

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

1
Так, мені найкраще подобається ця відповідь ... безпечне оновлення + просто працює - дякую
Роб

1
Я помітив, що функція ctrl + F для пошуку слів стає повільною після того, як я встановив цей плагін, тому я його вилучив, чи можете ви сказати мені, якщо з вами трапиться така ж ситуація ?.
dennisbot

Ctrl + Shift + T використовується для відкриття останньої закритої вкладки в Sublime. Тому я віддаю перевагу Ctrl + Alt + T
Pawel

5
Існує варіант називається trailing_spaces_trim_on_save, який ви можете встановити trueв Preferences > Package Settings > Trailing Spaces > Settings - User. Ви можете використовувати це замість прив'язки комбінації клавіш, я вважаю, що це краще для моїх потреб
dspacejs

Попередження: прокрутка великих файлів стає значно повільнішою при встановленні цього плагіна.
compie

67

Я використовую ці кроки для швидкого рішення на вимогу в Sublime Text:

  1. Знайти> Замінити ...
  2. Знайти що: [ \t]+\n
  3. Замінити: \n
  4. Замінити всіх

Ви також можете зробити це для великого набору файлів через

  1. Знайти> Знайти у файлах ...
  2. Знайти: [ \t]+\n
  3. Де:
  4. Замінити: \n
  5. Замініть

5
Цей метод працює для всіх рядків, крім останнього.
Джонком

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]+$є Regex для "принаймні одного символу пробілу (таким чином пробіли та вкладки, але не нові рядки, використовуючи подвійне заперечення) з подальшим закінченням рядка"

Регулярний вираз повинен бути включений: Увімкнути регулярне вираження - це діалогове вікно пошуку


22

Ось надзвичайно простий спосіб, який не використовує плагінів чи налаштувань і працює в більшості ситуацій.

  1. Вибір кількох елементів і переміщення курсору до кінця кожного рядка
  2. Утримуйте CTRL-Shift, натисніть вліво, вправо
  3. Пробіли та вкладки в кінці рядків тепер слід вибирати. Натисніть Видалити або Резервна область

    Примітка. Спеціальні символи, такі як (і +, також можуть бути вибрані в кінці рядка в цій точці, а не лише пробілами.

Як вибрати багато рядків:

Один із способів - використовувати середню клавішу миші, щоб вибрати вертикально, а потім натиснути клавішу завершення, якщо це невеликий вибір.

За допомогою гарячих клавіш:

  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

2
Примітка. Щоб виділити всі рядки з багатокутовим курсором в останньому положенні, ви можете використовувати CTRL + A, а потім CTRL + SHIFT + L, а потім END.
Річард Марскелл - Дракір

2
Використовуючи цю техніку на інших наборах даних, я виявив, що це не ідеально. Піднесений текст також виділить спеціальні символи, такі як) та +, а також пробіли. Будьте уважні, якщо частина даних закінчується спеціальними символами.
shanemgrey

2
Також FYI \sв регулярному виразі не тільки відповідає символу пробілу, але і вкладки та нові рядки (тобто "пробіли") не просто пробіли. :)
Річард Марскелл - Дракір

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

Для мене це ідеальне рішення, Thx
Vikrame
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.