Как автоматически удалить конечные пробелы в Eclipse?

422

Вопрос состоит из двух частей, на одну из которых у меня уже есть ответ.

  1. Как автоматически удалить конечные пробелы из всего редактируемого файла ? -> Ответ: используйте плагин AnyEdit , который можно настроить для этого при любом сохранении в файл.
  2. Как автоматически удалить конечные пробелы только из строк, которые я изменил ? -> Это я не знаю и был бы признателен за любую помощь.
Ян Жаньковский
источник
97
Я был бы счастлив, если бы смог убедить Eclipse прекратить добавлять конечные пробелы, которые я не печатал.
Divegeek
5
Вам не нужен плагин. Просто используйте C ++ -> Editor -> Save Actions. Также «Общие» -> «Редакторы» -> «Текстовые редакторы» -> «Показать пробельные символы» (нажмите для детальной настройки), это очень удобно.
Trass3r
3
Действие сохранения по умолчанию не обрезает конечные пробелы в комментариях Java Doc. Кроме того, он ограничен тем, что работает только с файлами Java. У нас есть система проверки кода, которая помечает все конечные пробелы как ошибки. AnyEdit неоценим для заботы о пробелах для всех типов файлов. Кроме того, может быть полезно выяснить, какие ограничения существуют в вашей компании для программного обеспечения третьей стороны. Плагин AnyEdit имеет лицензию EPL ( opensource.org/licenses/eclipse-1.0.php ) [отсюда: andrei.gmxhome.de/anyedit/index.html]
Ашутош Джиндал,
1
Я не мог понять, почему вдруг пробелы в конце строк удаляются, пока я не увидел ваш вопрос и не выяснил, что это из-за AnyEditPlugin. Спасибо!
Цафрир

Ответы:

142
  1. Удаление пробелов из всего редактируемого файла :

Preferences-> Java-> Editors-> Save Actions-> проверить Perform the selected actions on save-> проверить Additional actions-> щелкнуть Configure..-> перейти на Code organizingвкладку -> проверить Remove trailing whitespace-> выбрать All lines.

  1. Удаление пробелов только из строк, которые я изменил :

Preferences-> Java-> Editor-> Save Actions-> проверить " Perform the selected actions on save-> проверить Format source code-> выбрать Format edited lines.

Обратите внимание, что нажимать не нужно Configure the formatter settings on the Formatter page- все стили кода автоматически включают удаление конечных пробелов. По крайней мере, я не смог найти параметр для этого в конфигурации Formatter, и он работал из коробки для встроенных соглашений Java, стилей Eclipse, Eclipse 2.1, а также GoogleStyle .

При использовании этой настройки вам, очевидно, также необходимо отключить решение части 1 вопроса.

Eclipse version checked: 4.5.2, 4.11
Дэн Бериндей
источник
Как мне определить формат? Использовать ли ссылку «Форматирование» или кнопку «Настроить»?
Виджай Котари
Эта опция также отображается в PDT для PHP в разделе «Сохранить действия».
thaddeusmt
1
@VijayKotari Ответ отредактирован - не нужно определять формат.
Ян Ланьковский
350

Я предполагаю, что ваши вопросы касаются кода Java. Если это так, вам не нужны дополнительные плагины для выполнения 1). Вы можете просто перейти в « Настройки» -> «Java» -> «Редактор» -> «Сохранить действия» и настроить его для удаления конечных пробелов .

Судя по всему, вы также хотите сделать это для всей команды, верно? Чтобы упростить жизнь и избежать необходимости настраивать ее каждый раз, когда у вас появляется новое рабочее пространство, вы можете установить действие сохранения как предпочтение конкретного проекта, которое сохраняется в вашем SCM вместе с кодом.

Для этого щелкните правой кнопкой мыши свой проект и перейдите в Свойства -> Редактор Java -> Сохранить действия . Оттуда вы можете включить конкретные настройки проекта и настроить его для удаления конечных пробелов (среди других полезных вещей).

Примечание : эта опция была удалена в Eclipse Kepler (4.3) и последующих выпусках.

NB # 2: вариант, кажется, вернулся в Eclipse Luna -Luna Service Release 1a (4.4.1)

gcastro
источник
2
Спасибо, gcastro - это проще, чем AnyEdit. К сожалению, это для всего редактируемого файла ... до сих пор не знаю, как это сделать только для строк, которые я изменил - похоже, сейчас это невозможно.
Ян Янковский
7
Хорошо для Java; хорошо для C / C ++ тоже; но не для Python в PyDev.
Крейг МакКуин
14
Для Python в PyDev я сделал запрос функции для этого. Смотрите: sourceforge.net/tracker/…
Крейг МакКуин
5
К вашему сведению ... Та же концепция для PHP. Настройки -> PHP -> Редактор -> Сохранить действия.
seanmrafferty
1
Я не знаю, работало ли это когда-либо, но, похоже, оно не работает в последней версии Eclipse (Kepler). Вы можете запускать форматтер только на отредактированных строках, но обрезка пробелов ограничена всеми строками или игнорированием пустых строк - действительно раздражает.
Thor84no
73

Вам не нужен плагин для этого. Например, если вы кодируете JAVA, вы можете удалить конечные пробелы, конфигурируя действия сохранения:

Затмение 3.6

Preferences-> Java-> Editors-> Save Actions-> Проверить Perform the selected actions on save-> Проверить Additional actions-> Нажмите Configure..кнопку.

На Code organizingвкладке проверьтеRemove trailing whitespace

Дейв
источник
4
Это первый ответ, который специально рекомендует искать в разделе «Дополнительные действия» «Удалить конечные пробелы». Спасибо.
DavidRR
7
это работает только для файлов .java, я обычно работаю с дюжиной расширений
Eildosa
Работает для Eclipse 4.12
Матильда Смедс
46

PyDev может сделать это либо Ctrl+ Shift+, Fесли у вас установлена ​​опция форматирования кода, либо during saving:

Eclipse-> Window-> Preferences-> PyDev-> Editor-> Code Style-> Code Formatter:

Я использую по крайней мере это:

  • Автоформат перед сохранением
  • Правильные линии отделки?
  • Добавить новую строку в конце файла
Ciantic
источник
5
Это не охватывает вопрос удаления пространства только из отредактированных строк. Это также опасная функция, потому что она запускает все опции Code Formatter, а опция без контроля не совпадает с опцией «игнорировать / не использовать». Например: если флажок «Использовать пробел после запятых» снят, Code Formatter удалит эти пробелы вместо игнорирования параметра.
Джоттон
7
В PyDev Code Formatter появилась новая опция: при сохранении применять форматирование только в измененных строках.
warvariuc
2
-1 за слишком общий ответ - вопрос был только о пустом месте; Включение автоматического форматирования кода означает, что ваши исходные коммиты начнут содержать незапланированные вещи, что приведет к запутанной истории, потому что коммиты содержат вещи, которые не связаны с названием коммита.
Эрик Каплун
36

Сделайте следующее:

Preferences-> Java-> Editor->Save Actions

введите описание изображения здесь

Сумит Сингх
источник
19

Вы можете сопоставить ключ в Eclipse, чтобы вручную удалить конечные пробелы во всем файле, но только по запросу, а не автоматически при сохранении. (Предпочтение / Ключи, а затем сопоставить набор ключей с Файлом / Удалить конечные пробелы). Это может быть полезно, если вы хотите очистить все новые файлы, но оставить прежний код без изменений.

Другая стратегия заключается в том, чтобы активировать визуальное отображение пробелов, так что вы, по крайней мере, будете знать, когда добавляете пробелы в конце. Насколько я знаю, нет никакого способа отобразить только конечные пробелы, но я буду рад оказаться ошибочным.

Кена
источник
Большое спасибо за этот ответ! Пока что это единственный способ, который я нашел для плагина Aptana.
Игорь Зиновьев
11

В крайнем случае, для тех редакторов, которые вообще не поддерживают удаление конечных пробелов (например, редактор XML), вы можете удалить его из всех строк, выполнив поиск и замену, включив регулярные выражения, а затем найдя "[\ t] + $ "и заменить его на" "(пусто). Вероятно, есть лучшее регулярное выражение для этого, но оно работает для меня без необходимости устанавливать AnyEdit.

Malvineous
источник
9

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

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

Если по каким-то причинам вам нужно сохранить конечные пробелы в строках, которые не были изменены вами, у меня нет ответа для вас, и я не уверен, что такого рода функция существует в любом плагине Eclipse ...

Ромэн Линсолас
источник
4
Да, я хотел бы, чтобы пробелы в строках не изменялись мной. Это поведение Intellij Idea по умолчанию (убирайте пробелы в моих строках, оставляйте их в других), и я хотел бы получить это в Eclipse. , Спасибо за ответ.
Ян Янковски
8

Сейчас невозможно сделать это в Eclipse в общем виде, но это можно изменить, если у вас есть базовые знания Java и немного свободного времени, чтобы добавить базовую поддержку для этого. https://bugs.eclipse.org/bugs/show_bug.cgi? ID = 180349

Зависимая проблема: https://bugs.eclipse.org/bugs/show_bug.cgi?id=311173

анатолий техтоник
источник
4

Есть действительно простой способ сделать это с помощью sed, инструмента командной строки Unix. Возможно, вы могли бы создать макрос в Eclipse для запуска этого:

sed -i 's/[[:space:]]*$//' <filename>
jcoffland
источник
4

Как сказал @Malvineous, это не профессионал, а обходной путь, чтобы использовать метод Find / Replace для удаления конечного пробела (ниже, включая вкладку U + 0009 и пробел U + 0020).
Просто нажмите Ctrl + F (или команду + F)

  1. найти [\t ][\t ]*$
  2. Заменить на пустую строку
  3. Используйте регулярные выражения
  4. Заменить все

дополнительно:
для удаления начального пробела найти ^[\t ][\t ]*вместо [\t ][\t ]*$
удаления пустых строк, найти^\s*$\r?\n

fuweichin
источник
1
Как насчет [\t ]+$вместо [\t ][\t ]*$?
Джона Грэм
1

Я не знаю ни одного решения для второй части вашего вопроса. Причина в том, что не ясно, как определить, я изменил . Изменилось когда? Просто между 2 сохранениями или между коммитами ... В основном - забудьте об этом.

Я предполагаю, что вы хотели бы придерживаться некоторого руководства, но не трогайте остальную часть кода. Но руководство следует использовать в целом, а не для укусов и кусочков. Поэтому я предлагаю изменить весь код в соответствии с указаниями: это разовая операция, но убедитесь, что у всех ваших разработчиков одинаковый плагин (AnyEdit) с одинаковыми настройками для проекта.

фургон
источник
7
Так как это действие сохранения, строки будут изменены между сохранениями. Eclipse уже отслеживает эти линии для маркировки на боковой панели.
звездный синий
0

Я использовал эту команду для git: git config --global core.whitespace cr-at-eol

Удаляет ^Mсимволы, которые тянутся.

user7577563
источник