Как удалить пробел в emacs?

У меня есть текстовый файл с фиксированными линиями длины, дополненный конечными пробелами, например:

hello world                 ↩
this is some other line     ↩
x                           ↩

и я хочу удалить конечные пробелы в каждой строке, чтобы он выглядел как

hello world↩
this is some other line↩
x↩

Можно ли написать макрос emacs, который может решить эту проблему?

Изменить: линии могут иметь любое произвольное количество пробелов в нем перед конечными пробелами в конце, поэтому

hi     world                ↩

может быть допустимой строкой в ​​этом файле.

Ответ 1

Emacs имеет встроенный fixup-whitespace (M-space), который сжимает более одного места только в одном пространстве:

hello      world         ↩
                    ^
                  cursor 

M-x fixup-whitespace

hello world ↩
           ^
         cursor

Итак, вы можете просто определить макрос, который:

  • первые вызовы fixup-whitespace
  • затем удаляет последние пробелы

Другим может быть M-x replace-regexp RET [ ]+' RET ' RET, который решает проблему с использованием регулярных выражений.

Ответ 2

Существует команда emacs delete-trailing-whitespace, которая избавляется от пробелов после последнего символа. Если вы запустите его без какого-либо отмеченного региона, он очистит весь буфер. Если у вас активная область, очищаются только строки в области.

Многие люди добавляют следующий код в свой .emacs, так что всякий раз, когда он сохраняет файл, все конечные пробелы очищаются:

(add-hook 'before-save-hook
          'delete-trailing-whitespace)

Ответ 3

Я знаю, что у вас уже есть ответ, но в дополнение к fixup-whitespace есть также delete-horizontal-whitespace, который удаляет все пробелы вокруг точки. Есть пара других связанных команд, которые полезны в различных ситуациях. Вы можете просмотреть их с помощью M-: (info "(elisp) User-Level Deletion").