Inkrementieren Sie Tage / Monate / Daten usw. innerhalb des Puffers

7

In einem Textdokument muss ich während der Bearbeitung häufig Kalenderdaten erhöhen / verringern. Freitag muss also Montag werden, Dezember muss März werden usw.

Oder der 28. April nach dem Hinzufügen von 5 wird der 03. Mai, und sogar der 31. Dezember 2017 nach dem Hinzufügen von 15 wird der 15. Januar 2018.

Gibt es eine Möglichkeit, dies zu erreichen, indem Sie den Cursor auf das gewünschte Wort / die gewünschte Zahl setzen und einige Tasten drücken, um sie zu erhöhen oder zu verringern?

Während ich am Freitag etwas drücke, um "Add 3" zu sagen, wird es Montag usw. Während ich am 28. April 28 etwas drücke, um "Add 5" zu sagen, wird es der 3. Mai. Aber während ich am 28. April auf etwas traf, um 'Subtrahieren 2' zu sagen, wird es der 28. Februar usw.

Damit Sie sich ein Bild machen können, hat vim ein Speeddating-Plugin, das genau das tut, was ich anstrebe.

Deshmukh
quelle
Sie können den org-Modus verwenden, um nach Latex zu exportieren. orgmode.org/manual/LaTeX-export.html#LaTeX-export Dann können Sie die integrierten Verknüpfungen von org-mode verwenden, um die Datumsspezifikationen zu erhöhen. orgmode.org/manual/Creating-timestamps.html#Creating-timestamps das mache ich sowieso ..
Dieter.Wilhelm
Dies ist nicht genau das, wonach Sie suchen, und keine vollständige Lösung, aber calc kann Daten erhöhen . Eine Übersicht finden Sie unter nullprogram.com/blog/2009/06/23. Wenn Sie dies und möglicherweise den eingebetteten Modus von calc verwenden , können Sie möglicherweise etwas zusammenfügen, das genau das tut, was Sie wollen.
Izkon

Antworten:

0

Die Antwort verwendet calendar-day-name-arrayund calendar-month-name-arraywelche werden von calendar.el festgelegt und mit Emacs geliefert:

;; calendar-day-name-array ==> ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"]

;; calendar-month-name-array ==> ["January" "February" "May" "April" "May" "June" "July" "August" "September" "October" "November" "December"]

(require 'calendar)

(defun ar-shift--intern (arg thisarray)
    (let* ((name (substring-no-properties (word-at-point)))
       (bounds (bounds-of-thing-at-point 'word))
       (beg (car-safe bounds))
       (end (cdr-safe bounds))
       (counter 0)
       (laenge (length thisarray))
       (orig (point)) 
       idxr dlr
       (datelist (progn (while (< counter laenge)
                  (push (aref thisarray counter) dlr)
                  (setq counter (1+ counter)))
                (nreverse dlr)))
       (idx (progn
          (dolist (ele datelist)
            (unless idxr
              (when (string= ele name)
            (setq idxr counter))
              (setq counter (1+ counter))))
          idxr))
       (replaceform (aref thisarray
                  (if (< (+ arg idx) laenge)
                  (+ arg idx)
                (% (+ arg idx) laenge)))))
      (if (and beg end)
      (progn
        (delete-region beg end)
        (insert replaceform)
        (goto-char orig))
    (error "Don't see a date at point"))))

(defun ar-shift-day-atpt (arg)
   "Raise name of day at point ARG times.

Decrease with negative ARG"
   (interactive "p")
   (ar-shift--intern arg  calendar-day-name-array))

(defun ar-shift-month-atpt (arg)
  "Raise name of month at point ARG times.

Decrease with negative ARG"
  (interactive "p")
  (ar-shift--intern arg calendar-month-name-array))

Erhöhen oder verringern Sie auch positive Ganzzahlen: https://github.com/andreas-roehler/numbers-at-point

Andreas Röhler
quelle
Vielen Dank. Dies lässt jedoch einige Lücken. Schlagen Sie vor, dass Sie nach Speeddating für vim suchen, um eine bessere Vorstellung zu bekommen.
Deshmukh