Wie kann ich mit Emacs das aktuelle Datum und die aktuelle Uhrzeit in eine Datei einfügen?

74

Mit welchen Befehlen in Emacs kann ich das aktuelle Datum und die aktuelle Uhrzeit in den Textpuffer einer Datei einfügen?

(Zum Beispiel drückt das Äquivalent in Notepad einfach F5, was ungefähr die einzige nützliche Funktion für Notepad ist!)

Strahl
quelle
2
Strg + G im Editor öffnet das Dialogfeld "Gehe zu Linie", das ist auch nützlich!
cfeduke

Antworten:

136
C-u M-! date
Strahl
quelle
58
Nur der Vollständigkeit M-!halber : ist die Tastenkombination für die Funktion shell-command. So M-! datewird die Shell - Befehl aufrufen date, und zeigen Sie es im Ausgangsbereich (Minipuffer, da der Ausgang kurz genug , um fit ist). Das C-uist ein Präfix-Argument, mit dem M-!die Ausgabe stattdessen in den aktuellen Puffer gestellt wird.
ShreevatsaR
11
Wenn Sie Windows verwenden, erhalten Sie überraschende Ergebnisse. "Datum" ist ein Befehl zum Ändern des Systemdatums. Die Antworten, die diese Frage mit elisp behandeln, hängen nicht von einem Unix-, Unix-ähnlichen oder sogar Linux-Betriebssystem ab.
Richard Hoskins
40

Fügen Sie Ihre .emacs-Datei ein:

;; ====================
;; insert date and time

(defvar current-date-time-format "%a %b %d %H:%M:%S %Z %Y"
  "Format of date to insert with `insert-current-date-time' func
See help of `format-time-string' for possible replacements")

(defvar current-time-format "%a %H:%M:%S"
  "Format of date to insert with `insert-current-time' func.
Note the weekly scope of the command's precision.")

(defun insert-current-date-time ()
  "insert the current date and time into current buffer.
Uses `current-date-time-format' for the formatting the date/time."
       (interactive)
       (insert "==========\n")
;       (insert (let () (comment-start)))
       (insert (format-time-string current-date-time-format (current-time)))
       (insert "\n")
       )

(defun insert-current-time ()
  "insert the current time (1-week scope) into the current buffer."
       (interactive)
       (insert (format-time-string current-time-format (current-time)))
       (insert "\n")
       )

(global-set-key "\C-c\C-d" 'insert-current-date-time)
(global-set-key "\C-c\C-t" 'insert-current-time)

Referenz

Christian C. Salvadó
quelle
1
Ich verwende etwas Ähnliches, aber ich ändere es von Cc Ct in Cx Ct, weil Cc Ct der Bindung "Mark TODO item" im org-Modus im Wege steht. Was für mich leider fest im Muskelgedächtnis verankert ist. :)
AssembledGhost
"\C-c\C-d"mir passiert nichts Tatsächlich wird die aktuelle Zeile gelöscht, wenn sie C-deingegeben wird. Aber ich denke, warum C-cfunktioniert das nicht?
Jack
30

Ich habe diese kurzen Schnipsel verwendet:

(defun now ()
  "Insert string for the current time formatted like '2:34 PM'."
  (interactive)                 ; permit invocation in minibuffer
  (insert (format-time-string "%D %-I:%M %p")))

(defun today ()
  "Insert string for today's date nicely formatted in American style,
e.g. Sunday, September 17, 2000."
  (interactive)                 ; permit invocation in minibuffer
  (insert (format-time-string "%A, %B %e, %Y")))

Sie kamen ursprünglich von journal.el

Michael Paulukonis
quelle
2
Vielen Dank. Sehr schön. Für alle, die sich mit Emacs nicht auskennen: Verwenden Sie diese Option, indem Sie sie zu Ihrer .emacs.Datei hinzufügen und speichern. Bewegen Sie dann den Cursor (Punkt) in die Endklammer jeder Funktion und dann M-x M-efür jede. Jetzt können Sie mit M-x nowoder M-x todaywo immer Sie möchten einfügen .
Celwell
20

Zum Einfügungsdatum:

M-x org-time-stamp

Zum Einfügen von Datum und Uhrzeit:

C-u M-x org-time-stamp

Sie können einen globalen Schlüssel für diesen Befehl binden.

org-modeDie Methode ist sehr benutzerfreundlich. Sie können jedes Datum aus dem Kalender auswählen.

Tangxinfa
quelle
Gibt es eine Möglichkeit, es anders als das Datumsformat im Organisationsmodus zu formatieren?
Asalle
1
Das Datums- / Uhrzeitformat, in das eingefügt wird, org-time-stampwird von angegeben org-time-stamp-formats. ;; Datum mit benutzerdefiniertem Format einfügen. (let ((org-Zeitstempelformate) ("% Y-% m-% d". "% Y-% m-% d% H:% M:% S"))) (org-Zeit- Stempel nil)) ;; Datum mit benutzerdefiniertem Format einfügen. (let ((org-Zeitstempelformate) ("% Y-% m-% d". "% Y-% m-% d% H:% M:% S"))) (org-Zeit- stamp '(4)))
tangxinfa
15

Sie können yasnippet installieren , mit dem Sie "time" und die Tabulatortaste eingeben können und außerdem noch viel mehr. Es wird nur current-time-stringhinter den Kulissen aufgerufen, sodass Sie die Formatierung mithilfe von steuern können format-time-string.

Marcel Levy
quelle
2
yasnippet ist im Vergleich zu den eingebauten Vorlagen und Hippie-expand ein Ressourcenfresser.
Richard Hoskins
5

Hier ist ein Paket, das ich vor einiger Zeit geschrieben habe und das genau das tut, wonach Sie fragen.

http://github.com/rmm5t/insert-time.el/tree/master/insert-time.el

(require 'insert-time)
(define-key global-map [(control c)(d)] 'insert-date-time)
(define-key global-map [(control c)(control v)(d)] 'insert-personal-time-stamp)
Ryan McGeary
quelle
2

M-1 M-! Datum

Dies führt dazu, dass der von Ihnen ausgeführte Shell-Befehl in den Puffer eingefügt wird, den Sie gerade bearbeiten, und nicht in einen neuen Puffer.


quelle
2

Danke, CMS! Meine Variation für das, was es wert ist - macht mich glücklich genug:

(defvar bjk-timestamp-format "%Y-%m-%d %H:%M"
  "Format of date to insert with `bjk-timestamp' function
%Y-%m-%d %H:%M will produce something of the form YYYY-MM-DD HH:MM
Do C-h f on `format-time-string' for more info")


(defun bjk-timestamp ()
  "Insert a timestamp at the current point.
Note no attempt to go to beginning of line and no added carriage return.
Uses `bjk-timestamp-format' for formatting the date/time."
       (interactive)
       (insert (format-time-string bjk-timestamp-format (current-time)))
       )

Ich habe dies in eine Datei eingefügt, die von meinen .emacs aufgerufen wird, indem ich:

(load "c:/bjk/elisp/bjk-timestamp.el")

Dies erleichtert das Ändern, ohne das Risiko einzugehen, dass etwas anderes in meinen .emacs beschädigt wird, und ermöglicht mir einen einfachen Einstieg, um vielleicht eines Tages tatsächlich zu lernen, worum es bei dieser Emacs Lisp-Programmierung geht.

PS Kritik bezüglich meiner n00b-Technik ist sehr willkommen.

bjkeefe
quelle
1

Der einfachste Weg, ohne auf "Datum" zu schälen, ist wahrscheinlich:

(Einfügen (aktuelle Zeitzeichenfolge))

Dino Dini
quelle
0

Hier ist meine Meinung dazu.

(defun modi/insert-time-stamp (option)
  "Insert date, time, user name - DWIM.

If the point is NOT in a comment/string, the time stamp is inserted prefixed
with `comment-start' characters.

If the point is IN a comment/string, the time stamp is inserted without the
`comment-start' characters. If the time stamp is not being inserted immediately
after the `comment-start' characters (followed by optional space),
the time stamp is inserted with “--” prefix.

If the buffer is in a major mode where `comment-start' var is nil, no prefix is
added regardless.

Additional control:

        C-u -> Only `comment-start'/`--' prefixes are NOT inserted
    C-u C-u -> Only user name is NOT inserted
C-u C-u C-u -> Both prefix and user name are not inserted."
  (interactive "P")
  (let ((current-date-time-format "%a %b %d %H:%M:%S %Z %Y"))
    ;; Insert a space if there is no space to the left of the current point
    ;; and it's not at the beginning of a line
    (when (and (not (looking-back "^ *"))
               (not (looking-back " ")))
      (insert " "))
    ;; Insert prefix only if `comment-start' is defined for the major mode
    (when (stringp comment-start)
      (if (or (nth 3 (syntax-ppss)) ; string
              (nth 4 (syntax-ppss))) ; comment
          ;; If the point is already in a comment/string
          (progn
            ;; If the point is not immediately after `comment-start' chars
            ;; (followed by optional space)
            (when (and (not (or (equal option '(4)) ; C-u or C-u C-u C-u
                                (equal option '(64))))
                       (not (looking-back (concat comment-start " *")))
                       (not (looking-back "^ *")))
              (insert "--")))
        ;; If the point is NOT in a comment
        (progn
          (when (not (or (equal option '(4)) ; C-u or C-u C-u C-u
                         (equal option '(64))))
            (insert comment-start)))))
    ;; Insert a space if there is no space to the left of the current point
    ;; and it's not at the beginning of a line
    (when (and (not (looking-back "^ *"))
               (not (looking-back " ")))
      (insert " "))
    (insert (format-time-string current-date-time-format (current-time)))
    (when (not (equal option '(16))) ; C-u C-u
      (insert (concat " - " (getenv "USER"))))
    ;; Insert a space after the time stamp if not at the end of the line
    (when (not (looking-at " *$"))
      (insert " "))))

Ich binde das lieber an C-c d.

Kaushal Modi
quelle