#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")
помощью .