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

#emacs

#emacs

Вопрос:

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

 hello world                 ↩
this is some other line     ↩
x                           ↩
  

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

 hello world↩
this is some other line↩
x↩
  

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

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

 hi     world                ↩
  

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

Ответ №1:

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

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

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

Комментарии:

1. И если точка находится внутри строки пробелов, и если вы хотите удалить их все, тогда M- это сработает.

2. Я забыл название этого и по некоторым причинам не смог его найти — спасибо! 🙏🏼

Ответ №2:

http://www.emacswiki.org/emacs/DeletingWhitespace есть все, что вам нужно знать.

Это быстро и работает во всех версиях Emacs:

M-x picture-mode , затем C-c C-c

Ответ №3:

Emacs имеет встроенную fixup-whitespace функцию ( M-space ), которая сокращает более одного пробела до одного пробела:

 hello      world         ↩
                    ^
                  cursor 

M-x fixup-whitespace

hello world ↩
           ^
         cursor
  

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

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

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

Комментарии:

1. Обратите внимание, что апостроф на самом деле не является частью его проблемы, поэтому ваш совет по поводу регулярного выражения технически неверен. s/’/ $/ и это правильно.

2. Пожалуйста, обратите внимание, что исходный вопрос содержал апострофы.

Ответ №4:

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