2010-09-14 3 views
13

Я работаю над крупномасштабным проектом, где есть ~ 100 инженеров, работающих во многих файлах. Я хотел бы посмотреть, могу ли я добавить настройку в emacs, чтобы удалить конечные пробелы и отключить строки, которые я редактирую. Не будет хорошей идеей о непривязании и удалении пробелов в больших файлах, которые не связаны с моими изменениями. (Я согласен, все в команде должны быть следующие некоторые основные правила Что делать, когда-то она не работает таким образом :(.).untabify и удалять задние пробелы в emacs

В настоящее время я позволил:.

(show-ws-toggle-show-trailing-whitespace) 
(show-ws-toggle-show-tabs) 

Проблема с этими параметрами делает все файлы желтыми или белыми, если владелец файла не зафиксировал свои вкладки и завершающие пробелы.

Было бы здорово, если бы вы могли указать мне параметры emacs, которые позволят мне " удалить пробелы и вкладки в строках, которые я редактирую »(не во всех файлах).

+0

Не могли бы вы уточнить? Похоже, вы просто хотите сопоставить функцию над всеми открытыми буферами, а не с кучей файлов, верно? – pheaver

ответ

5

Я использовал 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))) 
+1

Я пробовал ws-trim и, к сожалению, он устанавливает пост-командный крюк, который иногда генерирует ошибки и полностью организовывает орг-режим. Например, когда я ударил 'z '(org-Agenda-add-note) из моего буфера для повестки дня, буфер' * Org Note *' не появляется. Затем, если я пытаюсь «C-x b» переключать буферы, минибуфер имеет ширину всего один символ: каждый раз, когда я набираю новый символ, он перезаписывает последнее. –

+1

Возможно, я был несправедлив к ws-trim; Я думаю, что это может быть проблемой с другим пакетом. Я снова пытаюсь ws-trim –

+0

Как вы отключите его при выполнении запроса-замены? Он изменяет пробелы в многострочных задачах с заменой запроса, чтобы они ничего не соответствовали. – EoghanM

15

Это не ответ на ваш вопрос. Но я подозреваю, что вам будет интересно узнать об этом:

http://github.com/glasserc/ethan-wspace

Он отслеживает является ли файл «чистый» (без замыкающие пробелы и табуляции), когда вы открываете его, и автоматически удалять их когда вы сохраняете его, если и только если он был чистым, когда вы начали. Это означает, что он сохранит файл в чистоте, если он начнет чист, и оставит в покое все файлы, которые были грязными (т. Е. Кто-то другой не соблюдал правила).

+0

Работает ли, отличная рекомендация. Благодаря! – ptrn

+0

Я только что наткнулся на этан-wspace, и он правил – Noah

8

Из моего crufty старого .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 

Invoke M-x clean-whitespace-region после выбора или маркировки региона.

untabify заменяет вкладки пробелами в зависимости от ваших текущих настроек tab-width. Затем я использую c-indent-region, когда мне присваиваются файлы со странными значениями tab-with (обычно 8, 4, 3 и 2).

Для remove trailing whitespace in emacs 21+во всем буфер использования delete-trailing-whitespace иначе regexp-replace работает, как описано выше.

1

Если вы хотите удалить замыкающие пробелы в текущей строке, используйте следующую команду:

(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))))))) 

привязать его к какой-либо ключ, который вы хотите.

2

Я использую это, чтобы удалить завершающие пробелы из всего документа. Я написал это много лет назад ...

;; 
;; 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)))) 
Смежные вопросы