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

373

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

  • Как автоматически удалить конечные пробелы из всего редактируемого файла? → Ответ: используйте AnyEdit плагин, который можно настроить таким образом при любом сохранении файла.
  • Как автоматически удалять конечные пробелы только из строк, которые я изменил? → Это я не знаю и буду признателен за любую помощь.
  • 92
    Я был бы счастлив, если бы смог убедить «Затмение» прекратить добавлять конечные пробелы, которые я не печатал.
  • 5
    Вам не нужен плагин. Просто используйте C ++ -> Editor -> Save Actions. Также «Общие» -> «Редакторы» -> «Текстовые редакторы» -> «Показать символы пробелов» (нажмите для детальной настройки), это очень удобно.
Показать ещё 2 комментария
Теги:
eclipse-plugin
whitespace

14 ответов

104
Лучший ответ
  • Удаление пробелов из всего редактируемого файла:

PreferencesJavaEditorsSave Actions → проверить Perform the selected actions on save → проверить Additional actions → нажмите Configure.. → перейти на вкладку Code organizing → проверить Remove trailing whitespace → выберите All lines.

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

PreferencesJavaEditorSave 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
  • 14
    А как насчет других редакторов - PHP, Python, Javascript?
  • 0
    Как мне определить формат? Использовать ли ссылку «Форматирование» или кнопку «Настроить»?
Показать ещё 3 комментария
360

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

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

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

NB. Эта опция была удалена в Eclipse Kepler (4.3) и следующих версиях.

NB # 2: Опция, похоже, вернулась в Eclipse Luna - Luna Service Release 1a (4.4.1)

  • 2
    Спасибо, gcastro - это проще, чем AnyEdit. К сожалению, это для всего редактируемого файла ... до сих пор не знаю, как это сделать только для строк, которые я изменил - похоже, сейчас это невозможно.
  • 7
    Хорошо для Java; хорошо для C / C ++ тоже; но не для Python в PyDev.
Показать ещё 8 комментариев
72

Для этого вам не нужен плагин. Например, если вы закодируете JAVA, вы можете стереть конечные пробелы, настраивая save actions:

Eclipse 3.6

PreferencesJavaEditorsSave Actions → Проверить Perform the selected actions on save → Проверить Additional actions → Нажмите кнопку Configure...

На вкладке Code organizing установите флажок Remove trailing whitespace

  • 4
    Это первый ответ, который специально рекомендует искать в разделе «Дополнительные действия» «Удалить конечные пробелы». Благодарю.
  • 7
    это работает только для файлов .java, я обычно работаю с дюжиной расширений
47

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

EclipseWindowPreferencesPyDevEditorCode StyleCode Formatter:

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

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

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

PreferencesJavaEditorSave Actions

Изображение 6687

18

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

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

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

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

8

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

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

8

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

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

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

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

Для php существует также опция: Изображение 6688

  • 0
    спасибо тебе большое!
4

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

sed -i 's/[[:space:]]*$//' <filename>
2

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

  • Найти [\t ][\t ]*$
  • Заменить с помощью пустой строки
  • Использовать Регулярные выражения
  • Заменить все

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

  • 1
    Как насчет [\t ]+$ вместо [\t ][\t ]*$ ?
1

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

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

1

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

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

  • 7
    Поскольку это действие сохранения, строки будут изменены между сохранениями. Eclipse уже отслеживает эти линии для маркировки на боковой панели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню