2010-09-14 16 views
13

Estoy trabajando en un proyecto a gran escala en el que hay ~ 100 ingenieros trabajando en muchos archivos. Me gustaría ver si puedo agregar personalización en emacs para eliminar espacios blancos finales y anular la identificación de las líneas que estoy editando. No será una buena idea anular la autenticación y eliminar espacios en blanco en archivos grandes que no están relacionados con mis cambios. (Estoy de acuerdo, todo el equipo debe estar siguiendo algunas reglas básicas que hacer, en algún momento que no funciona de esa manera :(..)untabify y eliminar los espacios en blanco finales en emacs

Actualmente He permitido:.

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

Emitir con estas opciones, hace que todos los archivos sean amarillos o blancos si el propietario del archivo no ha arreglado sus pestañas y espacios en blanco posteriores.

Sería genial si pudieras indicarme las opciones de emacs que me permitirán " elimine los espacios en blanco y las pestañas en las líneas que estoy editando "(no en todos los archivos).

+0

¿Podría aclarar? Parece que solo quieres asignar una función a todos los búferes abiertos, en lugar de a un montón de archivos, ¿verdad? – pheaver

Respuesta

5

He usado el paquete ws-trim.el desde que empecé a usar Emacs. Funciona a las mil maravillas; configúralo y olvídalo.

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

Intenté ws-trim y desafortunadamente instala un post-command-hook que a veces genera errores y borra totalmente org-mode. Por ejemplo, cuando presiono 'z '(org-agenda-añadir-nota) desde el búfer de agenda, el búfer' * Org Note *' no aparece. Entonces, si intento 'C-x b 'para cambiar los búferes, el minibúfer tiene solo un carácter de ancho: cada vez que escribo un nuevo carácter sobrescribe el último. –

+1

Pude haber sido injusto con ws-trim; Creo que esto puede haber sido un problema con otro paquete. Estoy probando ws-trim otra vez –

+0

¿Cómo se desactiva al hacer una consulta-reemplazar? Modifica los espacios en blanco en los destinos de reemplazo de consulta de varias líneas para que no coincidan con nada. – EoghanM

15

Esta no es una respuesta a su pregunta. Pero sospecho que le interesará saber sobre él:

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

Se realiza un seguimiento de si un archivo es "limpio" (sin espacios en blanco y las fichas) cuando se abre, y quitaré automáticamente cuando lo guardas si y solo si estaba limpio cuando comenzaste. Esto significa que mantendrá limpio un archivo si comenzó limpio, y dejará solo los archivos que estaban sucios (es decir, que otra persona no siguió las reglas).

+0

Hace el trabajo, excelente recomendación. ¡Gracias! – ptrn

+0

Acabo de encontrar ethan-wspace y rige – Noah

8

Desde mi enrevesada archivo antiguo .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 

invocación M-x clean-whitespace-region después de seleccionar o marcar una región.

untabify reemplaza las pestañas con espacios según su configuración actual de tab-width. Luego uso c-indent-region para cuando me dan archivos con valores extraños tab-with (8, 4, 3 y 2 parecen comunes).

Para remove trailing whitespace in emacs 21+en todo el uso de tampóndelete-trailing-whitespace lo contrario regexp-replace funciona como anteriormente.

1

Si desea eliminar espacios en blanco de cola en la línea actual, utilice el siguiente comando:

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

enlazarlo a la tecla que desea.

2

Lo he usado para eliminar espacios blancos finales de todo el documento. Escribí hace años ...

;; 
;; 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)))) 
Cuestiones relacionadas