2009-11-04 14 views
16

Ich habe diese Funktionen in meiner .emacs.el Datei seit Jahren hat:Wie konfiguriert man GNU Emacs, um standardmäßig UNIX- oder DOS-formatierte Dateien zu schreiben?

(defun dos2unix() 
    "Convert a DOS formatted text buffer to UNIX format" 
    (interactive) 
    (set-buffer-file-coding-system 'undecided-unix nil)) 

(defun unix2dos() 
    "Convert a UNIX formatted text buffer to DOS format" 
    (interactive) 
    (set-buffer-file-coding-system 'undecided-dos nil)) 

Diese Funktionen ermöglichen es mir leicht zwischen verschiedenen Formaten zu wechseln, aber ich bin nicht sicher, wie Emacs in einem bestimmten Format standardmäßig schreiben konfigurieren unabhängig davon, welche Plattform ich verwende. Wie es jetzt ist, wenn ich unter Windows laufe, speichert Emacs im Windows-Format; Wenn ich unter UNIX/Linux laufe, speichert Emacs im UNIX-Format.

Ich möchte Emacs dazu anweisen, im UNIX-Format zu schreiben, unabhängig von der Plattform, auf der ich arbeite. Wie mache ich das?

Sollte ich vielleicht einen Textmodus-Hook hinzufügen, der eine dieser Funktionen aufruft? Zum Beispiel, wenn ich unter Windows bin, dann rufe ich dos2unix, wenn ich eine Textdatei finde?

Antwort

23

ich ein paar davon in meiner .emacs haben:

(setq-default buffer-file-coding-system 'utf-8-unix) 
(setq-default default-buffer-file-coding-system 'utf-8-unix) 
(set-default-coding-systems 'utf-8-unix) 
(prefer-coding-system 'utf-8-unix) 

Ich weiß nicht, was richtig ist, bin ich nur abergläubisch.

+2

Ha! Das sind ziemlich gute Sachen. +1 für Gürtel und Hosenträger! –

+6

'setq-default' nicht' set-default' ist der richtige Weg, die obigen Variablen zu ändern. Andernfalls müssten Sie den Variablennamen angeben. – e40

+0

Korrigiert die Setq-Voreinstellungen –

11

Ich stimme Frage und Antwort, aber verbrachte ein paar Minuten möglicherweise Verbesserung der Informationen, also werde ich es hinzufügen.

Zuerst überprüfte ich die Dokumentation zu jeder Variablen und Funktion in der Antwort von user181548, indem (zuerst ausschneiden und in Emacs einfügen, dann Cursor auf jeden setzen und C-h v RET bzw. C-h f RET eingeben. Diese

schlug vor, dass ich nur

benötigen
(prefer-coding-system 'utf-8-unix) 

mit den anderen Linien Experimenting nicht vorbestehenden Puffer Kodierungen zu ändern scheinen (Eingabe C-h C RET RET zu überprüfen (describe-coding-system) und g jedes Mal zu aktualisieren), so ausgelassen ich die anderen Linien und einen Schlüssel-Bindung, um schnell alle alten Dateien zu ändern, die noch DOS waren, das heißt,

(defun set-bfr-to-8-unx() 
    (interactive) 
    (set-buffer-file-coding-system 
    'utf-8-unix) 
) 
(global-set-key (kbd "C-c u") 
     'set-bfr-to-8-unx 
     ) 

Für die neugierigen, die 3. und 4. Zeile von oben Funktion zu entdecken, (set-buffer-file-coding-system 'utf-8-unix) habe ich C-x RET f RET verwendet, um die Codierung des aktuellen Puffers manuell zu ändern, und dann M-x command-history RET, um zu sehen, wie diese Schlüssel in Code übersetzt werden.

Jetzt vielleicht mein git commit's wird aufhören zu jammern über CRs.

+0

BTW, ein Tastaturmakro kann nützlich sein, um Kodierungen für eine Reihe von Dateien zu ändern (sagen wir von Dired). Die modernen Tastenbelegungen dafür finden Sie unter https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#Basic-Keyboard-Macro. (Anstelle von 'Cx (' etc, können wir 'F3' und' F4' verwenden.) –

+0

Upvoted zum Entfernen der Redundanz, diese eine Zeile war alles was für 'utf-8-unix' Kodierung und' LF' Zeile benötigt wurde Ich dachte, ich würde zusätzlich '(set-language-environment "UTF-8") 'basierend auf [diesem Artikel] (http://ergoemacs.org/emacs/emacs_encoding_decoding_faq.html) setzen, entschied aber, dass ich nicht Ich brauche es. Danke! – legends2k