Не наносить вред и удалять задние пробелы в emacs
Я работаю над крупномасштабным проектом, в котором около 100 инженеров работают над многими файлами. Я хотел бы посмотреть, могу ли я добавить настройку в emacs, чтобы удалить конечные пробелы и отключить строки, которые я редактирую. Не будет хорошей идеей о непривязании и удалении пробелов в больших файлах, которые не связаны с моими изменениями. (Я согласен, все в команде должны следовать некоторым основным правилам. Что делать, когда-то это не работает таким образом.:().
В настоящее время я включил:
(show-ws-toggle-show-trailing-whitespace)
(show-ws-toggle-show-tabs)
Проблема с этими параметрами делает все файлы желтыми или белыми, если владелец файла не зафиксировал свои вкладки и завершающие пробелы.
Было бы здорово, если бы вы могли указать мне параметры emacs, которые позволят мне "удалить пробелы и вкладки в строках, которые я редактирую" (не во всех файлах).
Ответы
Ответ 1
Я использовал пакет ws-trim.el с тех пор, как начал использовать Emacs. Отлично работает; настроить его и забыть.
;;;; ************************************************************************
;;;; *** strip trailing whitespace on write
;;;; ************************************************************************
;;;; ------------------------------------------------------------------------
;;;; --- ws-trim.el - [1.3] ftp://ftp.lysator.liu.se/pub/emacs/ws-trim.el
;;;; ------------------------------------------------------------------------
(require 'ws-trim)
(global-ws-trim-mode t)
(set-default 'ws-trim-level 2)
(setq ws-trim-global-modes '(guess (not message-mode eshell-mode)))
(add-hook 'ws-trim-method-hook 'joc-no-tabs-in-java-hook)
(defun joc-no-tabs-in-java-hook ()
"WS-TRIM Hook to strip all tabs in Java mode only"
(interactive)
(if (string= major-mode "jde-mode")
(ws-trim-tabs)))
Ответ 2
Это не ответ на ваш вопрос. Но я подозреваю, что вам будет интересно узнать об этом:
http://github.com/glasserc/ethan-wspace
Он отслеживает, является ли файл "чистым" (без зависания пробелов и вкладок) при его открытии и автоматически удаляет их при его сохранении, если и только если он был чистым, когда вы начали. Это означает, что он сохранит файл в чистоте, если он начнет чист, и оставит в покое все файлы, которые были грязными (т.е. Кто-то другой не соблюдал правила).
Ответ 3
Из моего старого старого файла .emacs
:
(defun clean-whitespace-region (start end)
"Untabifies, removes trailing whitespace, and re-indents the region"
(interactive "r")
(save-excursion
(untabify start end)
(c-indent-region start end)
(replace-regexp "[ ]+$" "" nil start end))) ;// uses literal space and tab chars
Вызов M-x clean-whitespace-region
после выбора или маркировки области.
untabify
заменяет вкладки пробелами в зависимости от ваших текущих настроек tab-width
. Затем я использую c-indent-region
, когда мне присваиваются файлы со странными значениями tab-with
(обычно 8, 4, 3 и 2).
В удалить конечные пробелы в emacs 21+ во всем используемом буфере delete-trailing-whitespace
иначе regexp-replace
работает, как указано выше.
Ответ 4
Я использую это, чтобы удалить завершающие пробелы из всего документа. Я написал это много лет назад...
;;
;; RM-Trailing-Spaces
;;
(defun rm-trailing-spaces ()
"Remove spaces at ends of all lines"
(interactive)
(save-excursion
(let ((current (point)))
(goto-char 0)
(while (re-search-forward "[ \t]+$" nil t)
(replace-match "" nil nil))
(goto-char current))))
Ответ 5
Если вы хотите удалить конечные пробелы в текущей строке, используйте следующую команду:
(defun delete-trailing-whitespace-of-current-line ()
"Delete all the trailing whitespace on the current line.
All whitespace after the last non-whitespace character in a line is deleted.
This respects narrowing, created by \\[narrow-to-region] and friends."
(interactive "*")
(save-match-data
(save-excursion
(move-to-column 0)
(if (re-search-forward "\\s-$" nil t)
(progn
(skip-syntax-backward "-" (save-excursion (forward-line 0) (point)))
(delete-region (point) (match-end 0)))))))
Привяжите его к любому ключу, который вы хотите.