2012-04-03 4 views
3

Wie Sie über das Schreiben einer Datei von Emacs gehen würde, dass nur die Zeilennummern zB enthält:Wie würden Sie Emacs dazu bringen, Zeilennummern in eine Datei zu schreiben?

1 
2 
3 
4 
5 

Im Idealfall wäre dies ein Befehl, die Sie ausführen würde (? How), die erzählt, wie viele Zeilen zu drucken können . Ist das möglich?

+2

Als Alternative zu den 'dotimes' Ansatz, könnten Sie auch' Nummer-sequence' und 'mapconcat' den Inhalt zu erzeugen für die Datei wie folgt: '(mapconcat 'number-to-string (Zahlenfolge 1 5) "\ n") '. – phils

Antwort

5

Hier ist eine schnelle elisp Funktion bis 20 nummeriert, das tut es:

(defun write-line-numbers (n) 
    (interactive "nNumber of lines: ") 
    (save-excursion 
    (with-output-to-temp-buffer "*lines*" 
     (dotimes (line n) 
     (princ (format "%d\n" (1+ line)))) 
     (set-buffer "*lines*") 
     (write-file "lines.txt")))) 

Sie würden es mit (write-line-numbers 8) in elisp oder mit Mx Write-Line-Nummern laufen 8 interaktiv.

Oder Sie könnten die oben als Skript und führen Sie Emacs wie so sparen:

emacs -Q --script write-line-numbers.el --eval '(write-line-numbers 8)' 

Aber wie Moritz weist darauf hin, es gibt bessere Möglichkeiten, diese außerhalb von Emacs zu tun.

+0

Tut mir leid, ich bin ein kompletter Neuling mit Emacs aber wo würde ich die elisp Funktion schreiben? Wie stellen Sie diese Art von Funktionen innerhalb von Emacs zur Verfügung? – user1098798

+0

In '.emacs' in Ihr Home-Verzeichnis einfügen und Emacs neu starten. Oder tippe es in einen beliebigen Puffer und führe 'eval-last-sexp' (' C-x C-e') aus, wenn der Punkt unmittelbar nach dem letzten paren ist. Eine weitere Möglichkeit besteht darin, 'eval-expression' (' M-: ') auszuführen und an der Eingabeaufforderung einzugeben. Die letzten beiden Methoden werden zwischen Emacs-Sitzungen nicht beibehalten. – ataylor

+0

Fantastisch - vielen Dank. – user1098798

2

Warum verwenden Sie das Shell-Programm seq dafür nicht? Z.B. seq 20 wird 20 ordentlich Linien drucken 1

+0

Ich habe Sie uplooted, aber die Antwort nicht akzeptiert. Ihre Antwort ist wirklich nützlich zu wissen, aber ich bin mehr daran interessiert, mehr darüber herauszufinden, wie Emacs funktioniert, obwohl es nicht der einfachste Weg ist, eine Datei mit Zeilennummern zu füllen Ich möchte wissen, wie man es mit Emacs macht :) – user1098798

1

M-: (mit-Temp-file "foo.txt" (DOTIMES (i 15) (insert (Format "% 2d \ n" (1 + i)))))

Wenn Sie dies oft genug tun, machen sie eine Funktion:

(defun write-sequence (length output-file) 
    (interactive "nLength of sequence: \nFOutput file: ") 
    (with-temp-file output-file 
    (dotimes (i length) (insert (format "%d\n" (1+ i)))))) 
Verwandte Themen