Ich habe folgendes in meiner .emacs-Datei:Erste Emacs untabify sehr, wenn bestimmte Dateitypen speichern (und nur die Dateitypen)
(defun c++-mode-untabify()
(save-excursion
(goto-char (point-min))
(while (re-search-forward "[ \t]+$" nil t)
(delete-region (match-beginning 0) (match-end 0)))
(goto-char (point-min))
(if (search-forward "\t" nil t)
(untabify (1- (point)) (point-max))))
nil)
(add-hook 'c++-mode-hook
'(lambda()
(make-local-hook 'write-contents-hooks)
(add-hook 'write-contents-hooks 'c++-mode-untabify)))
Vorwiegend aus http://www.jwz.org/doc/tabs-vs-spaces.html abgezockt. Das führt dazu, dass Emacs untabify
auf dem Puffer ausführen, bevor eine C++ - Datei gespeichert wird.
Das Problem ist, dass, nachdem ich eine C++ Datei geladen haben, die untabify
Haken angelegt wird an alle nachfolgenden Datei, auch für die Puffer der anderen Dateitypen schreibt. Das heißt, wenn ich eine C++ - Datei öffne und dann zB eine tabulatorgetrennte Textdatei bearbeite, werden die Tabs beim Speichern der Datei durcheinander gebracht.
Ich bin kein elisp Guru, aber ich denke, die (make-local-hook 'write-contents-hooks)
Zeile versucht, die Ergänzung zu write-contents-hooks
gelten nur für den lokalen Puffer. Es funktioniert jedoch nicht und c++-mode-untabify
ist in write-contents-hooks
für alle Puffer.
Ich verwende EmacsW32 22.0 auf einer Windows XP-Box. Hat jemand eine Idee, wie man die write-contents-hooks
Änderung lokal zu einem bestimmten Puffer oder wie man es auf nil
beim Umschalten auf andere, nicht-C++ - Puffer zurücksetzen?
Dank! Ich setze das ein, um automatisch Tabs von älterem Code zu entfernen, den ich nicht geschrieben habe, aber gelegentlich pflegen muss. – DanielMcP