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!)
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!)
Antworten:
C-u M-! date
M-!
halber : ist die Tastenkombination für die Funktion shell-command
. So M-! date
wird die Shell - Befehl aufrufen date
, und zeigen Sie es im Ausgangsbereich (Minipuffer, da der Ausgang kurz genug , um fit ist). Das C-u
ist ein Präfix-Argument, mit dem M-!
die Ausgabe stattdessen in den aktuellen Puffer gestellt wird.
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)
"\C-c\C-d"
mir passiert nichts Tatsächlich wird die aktuelle Zeile gelöscht, wenn sie C-d
eingegeben wird. Aber ich denke, warum C-c
funktioniert das nicht?
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
.emacs.
Datei hinzufügen und speichern. Bewegen Sie dann den Cursor (Punkt) in die Endklammer jeder Funktion und dann M-x M-e
für jede. Jetzt können Sie mit M-x now
oder M-x today
wo immer Sie möchten einfügen .
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-mode
Die Methode ist sehr benutzerfreundlich. Sie können jedes Datum aus dem Kalender auswählen.
org-time-stamp
wird 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)))
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)
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.
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.
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
.