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!)
datetime
emacs
timestamp
text-editor
Strahl
quelle
quelle
Antworten:
quelle
M-!
halber : ist die Tastenkombination für die Funktionshell-command
. SoM-! date
wird die Shell - Befehl aufrufendate
, und zeigen Sie es im Ausgangsbereich (Minipuffer, da der Ausgang kurz genug , um fit ist). DasC-u
ist ein Präfix-Argument, mit demM-!
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)
Referenz
quelle
"\C-c\C-d"
mir passiert nichts Tatsächlich wird die aktuelle Zeile gelöscht, wenn sieC-d
eingegeben wird. Aber ich denke, warumC-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
quelle
.emacs.
Datei hinzufügen und speichern. Bewegen Sie dann den Cursor (Punkt) in die Endklammer jeder Funktion und dannM-x M-e
für jede. Jetzt können Sie mitM-x now
oderM-x today
wo immer Sie möchten einfügen .Zum Einfügungsdatum:
Zum Einfügen von Datum und Uhrzeit:
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.quelle
org-time-stamp
wird von angegebenorg-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)))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-string
hinter den Kulissen aufgerufen, sodass Sie die Formatierung mithilfe von steuern könnenformat-time-string
.quelle
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)
quelle
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
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.
quelle
Der einfachste Weg, ohne auf "Datum" zu schälen, ist wahrscheinlich:
(Einfügen (aktuelle Zeitzeichenfolge))
quelle
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
.quelle