wake-up-neo.com

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

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

(Zum Beispiel wird in Notepad einfach die Taste F5 gedrückt. Dies ist ungefähr die einzige nützliche Funktion für Notepad!)

64
Ray Vega
C-u M-! date
124
eclecticx

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

33
CMS

Ich habe diese kurzen Auszüge 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 aus journal.el

27

Für Datum einfügen:

M-x org-time-stamp

Für Datum einfügen Zeit:

C-u M-x org-time-stamp

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

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

15
tangxinfa

Sie können yasnippet installieren, wodurch Sie "time" und die Tabulatortaste eingeben können und noch viel mehr tun. Es ruft einfach hinter den Kulissen current-time-string auf, so dass Sie die Formatierung mit format-time-string steuern können.

15
Marcel Levy

Hier ist ein Paket, das ich vor einiger Zeit geschrieben habe und 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)
5
Ryan McGeary

M-1 M-! Datum

dies führt dazu, dass der von Ihnen ausgeführte Shell-Befehl anstelle eines neuen Puffers in den gerade bearbeiteten Puffer eingefügt wird. 

2
user284244

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 lege dies in eine Datei, die von meinen .emacs aufgerufen wird:

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

dies macht es einfacher, Änderungen vorzunehmen, ohne zu riskieren, etwas anderes in meinen .emacs zu brechen, und erlaubte mir einen einfachen Einstieg in vielleicht eines Tages tatsächlich zu lernen, worum es bei dieser Emacs LISP-Programmierung geht. 

P.S. Kritikpunkte bezüglich meiner n00b-Technik sind sehr willkommen.

1
bjkeefe

Eine ähnliche Antwort wie bereits veröffentlichte Antworten sowie Erklärungen und weitere Erweiterungen, z. B. das automatische Öffnen einer Datei und das Einfügen des aktuellen Datums am Ende (wie bei einem Tagebuch), finden Sie hier Paul Fords Besprechung seiner emacs-Dienstprogramme .

1
Brendan Foote

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 bevorzuge es, dies an C-c d zu binden.

0
Kaushal Modi