Как я могу вставить текущую дату и время в файл, используя Emacs? - PullRequest
68 голосов
/ 31 октября 2008

Какие команды в Emacs я могу использовать для вставки в текстовый буфер файла текущей даты и времени?

(Например, эквивалент в блокноте просто нажимает F5, что является единственной полезной функцией для блокнота!)

Ответы [ 10 ]

126 голосов
/ 09 ноября 2008
C-u M-! date
36 голосов
/ 31 октября 2008

Поместите в ваш файл .emacs:

;; ====================
;; 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)

Ссылка

28 голосов
/ 06 марта 2009

Я использовал эти короткие фрагменты:

(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")))

Они изначально были из journal.el

15 голосов
/ 13 июня 2013

Для вставки даты:

M-x org-time-stamp

Для вставки даты и времени:

C-u M-x org-time-stamp

Вы можете связать глобальный ключ для этой команды.

Метод

org-mode очень удобен для пользователя, вы можете выбрать любую дату из календаря.

15 голосов
/ 31 октября 2008

Вы можете установить yasnippet , который позволит вам ввести «время» и клавишу табуляции, а также многое другое. Он просто вызывает current-time-string за кулисами, поэтому вы можете управлять форматированием, используя format-time-string.

5 голосов
/ 31 октября 2008

Вот пакет, который я недавно написал, который делает то, что вы просите.

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)
2 голосов
/ 02 марта 2010

М-1 М-! дата

это заставляет команду оболочки, которую вы запускаете, вставляться в буфер, который вы редактируете в настоящее время, а не в новый буфер.

1 голос
/ 09 сентября 2010

Ответ, похожий на уже опубликованный, с объяснениями и дополнительными расширениями, такими как автоматическое открытие файла и вставка текущей даты в конце (например, журнала), можно найти в Обсуждение Полом Фордом утилиты emacs .

1 голос
/ 18 августа 2010

Спасибо, CMS! Моя вариация, для чего она стоит - делает меня достаточно счастливым:

(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)))
       )

Я поместил это в файл, который вызывается моим .emacs, используя:

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

, что облегчает изменение, не рискуя сломать что-то еще в моих .emacs, и позволяет мне легко войти, может быть, когда-нибудь на самом деле узнать, что такое программирование на Emacs Lisp.

P.S. Критика в отношении моей техники n00b приветствуется.

0 голосов
/ 31 марта 2015

Вот мое мнение.

(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 " "))))

Я предпочитаю привязывать это к C-c d.

...