2010-09-14 30 views
13

Pracuję nad projektem na dużą skalę, gdzie jest około 100 inżynierów pracujących nad wieloma plikami. Chciałbym zobaczyć, czy mógłbym dodać personalizację w emacs, aby usunąć końcowe białe spacje i zdekodować linie, które edytuję. Nie byłoby dobrym pomysłem, aby usunąć i usunąć białe spacje w dużych plikach, które nie są powiązane z moimi zmianami. (Zgadzam się, każdy w zespole powinien być po kilka podstawowych zasad, co robić, czasami to nie działa w ten sposób :(.).untabify i usuwanie końcowych białych znaków w emacs

Obecnie mam włączone:.

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

Problem z tymi opcjami powoduje, że wszystkie pliki są żółte lub białe, jeśli właściciel pliku nie naprawił jego tabulacji i spacji.

Byłoby wspaniale, gdybyś mógł wskazać mi opcje emacs, które umożliwią mi ". usuń białe spacje i tabulatory na liniach, które edytuję "(nie wszystkie pliki)

+0

Czy mógłbyś wyjaśnić? Wygląda na to, że chcesz zamapować funkcję na wszystkie otwarte bufory, a nie na kilka plików, prawda? – pheaver

Odpowiedz

5

Użyłem pakiet ws-trim.el odkąd zacząłem używać Emacsa. To działa jak urok; skonfiguruj i zapomnij.

;;;; ************************************************************************ 
;;;; *** 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

Próbowałem ws-trim i niestety instaluje on po-command-hook, który czasami generuje błędy i całkowicie borks-mode. Na przykład, gdy naciśniesz 'z '(org-agenda-add-note) z mojego bufora porządku, bufor' * Org Note *' nie pojawia się. Następnie, jeśli spróbuję "C-x b", aby przełączyć bufory, minibufor ma tylko jeden znak szerokości: za każdym razem, gdy wpisuję nowy znak, zastępuje on ostatni. –

+1

Mogłem być niesprawiedliwy wobec ws-trim; Myślę, że to może być problem z innym pakietem. Próbuję ws-trim ponownie –

+0

Jak wyłączyć to przy wymianie zapytań? Modyfikuje białe znaki w wielowierszowych kwerendach zastępujących zapytania, tak aby nie pasowały do ​​niczego. – EoghanM

15

To nie jest odpowiedź na twoje pytanie. Ale podejrzewam, że będzie można się dowiedzieć o tym:

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

Śledzi, czy plik jest „czysty” (wolne od końcowe spacje i tabulatory), kiedy go otworzyć, i automatycznie je usunąć kiedy ją zapiszesz, tylko wtedy, gdy było czyste, gdy zaczynałeś. Oznacza to, że plik będzie czysty, jeśli będzie czysty, i pozostawi samodzielnie wszystkie pliki, które są brudne (tj. Ktoś inny nie przestrzega zasad).

+0

Czy praca, doskonała rekomendacja. Dzięki! – ptrn

+0

Po prostu natknąłem się na ethan-wspace i rządzę – Noah

8

Z mojego crufty starego .emacs pliku:

(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 po wybraniu lub oznakowanie region.

untabify zastępuje karty spacjami w zależności od bieżących ustawień tab-width. Następnie używam c-indent-region, gdy otrzymuję pliki o dziwnych wartościach (8, 4, 3 i 2).

do remove trailing whitespace in emacs 21+w całym bufor stosowania delete-trailing-whitespace inaczej regexp-replace pracuje jak opisano powyżej.

1

Jeśli chcesz usunąć końcowe spacje w bieżącej linii, należy użyć następującego polecenia:

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

powiązać go z jakiegoś klucza chcesz.

2

Używam tego do usuwania końcowych białych znaków z całego dokumentu. I napisał lat temu ...

;; 
;; 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)))) 
Powiązane problemy