2010-09-14 9 views
13

Je travaille sur un projet à grande échelle où environ 100 ingénieurs travaillent sur de nombreux fichiers. Je voudrais voir si je pourrais ajouter la personnalisation dans emacs pour enlever les espaces blancs de fin et pour ne pas étiqueter les lignes que je édite. Ce ne sera pas une bonne idée de décomprimer et de supprimer les espaces dans les fichiers volumineux qui ne sont pas liés à mes modifications. (Je suis d'accord, tout le monde dans l'équipe devrait suivre quelques règles de base Que faire, parfois il ne fonctionne pas de cette façon :(..)untabify et supprimer les espaces de fin dans emacs

Actuellement, j'ai activé.

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

Problème avec ces options, il rend tous les fichiers jaunes ou blancs si le propriétaire du fichier n'a pas fixé ses onglets et les espaces de fin

Ce serait génial si vous pouviez me diriger vers des options emacs qui me permettront " supprimer les espaces et les onglets sur les lignes que je suis en train d'éditer "(pas tous les fichiers)

+0

Pourriez-vous clarifier? Il semble que vous vouliez simplement mapper une fonction sur tous les tampons ouverts, plutôt que sur un tas de fichiers, n'est-ce pas? – pheaver

Répondre

5

Je l'ai utilisé le paquet ws-trim.el depuis que je commencé à utiliser Emacs. Il fonctionne comme un charme; configurez-le et oubliez-le.

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

J'ai essayé ws-trim et malheureusement il installe un post-commande-hook qui génère parfois des erreurs et totalement borks en mode org. Par exemple, quand j'appuie sur z (org-agenda-add-note) de mon tampon d'agenda, le tampon '* Org Note * 'n'apparaît pas. Ensuite, si j'essaie de 'C-x b' pour changer de tampon, le mini-tampon n'a qu'un seul caractère: chaque fois que je tape un nouveau caractère, il écrase le dernier. –

+1

J'ai peut-être été injuste avec ws-trim; Je pense que cela peut avoir été un problème avec un autre paquet. J'essaie à nouveau ws-trim –

+0

Comment le désactivez-vous lors d'une requête-remplacement? Il modifie l'espace dans les cibles de requête-remplacement multi-lignes afin qu'elles ne correspondent à rien. – EoghanM

15

Ceci n'est pas une réponse à votre question. Mais je pense que vous serez intéressé de savoir à ce sujet:

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

Il garde la trace si un fichier est « propre » (sans fuite des espaces et des onglets) lorsque vous l'ouvrez, et les supprime automatiquement quand vous l'enregistrez si et seulement si c'était propre quand vous avez commencé. Cela signifie qu'il gardera un fichier propre s'il a démarré propre, et laissera seul tous les fichiers qui étaient sales (c'est-à-dire que quelqu'un d'autre n'a pas suivi les règles).

+0

Est-ce que le travail, excellente recommandation. Merci! – ptrn

+0

Je viens de travers ethan-wspace et il règle – Noah

8

De mon crufty ancien fichier .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 après avoir sélectionné ou le marquage d'une région.

untabify remplace les onglets avec des espaces en fonction de vos paramètres tab-width actuels. Je puis utiliser c-indent-region pour quand on me donne des fichiers avec des valeurs étranges tab-with (8, 4, 3 et 2 semblent communs).

Pour remove trailing whitespace in emacs 21+dans tout tampon utilisation delete-trailing-whitespace autrement regexp-replace fonctionne comme ci-dessus.

1

Si vous souhaitez supprimer des espaces blancs de fin de la ligne courante, utilisez la commande suivante:

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

Bind à ce que la clé que vous voulez.

2

J'ai utilisé ceci pour supprimer les espaces blancs de fin de tout le document. Je l'ai écrit il y a quelques années ...

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