Wie kann man böse Marker beibehalten?

10

Ich möchte in der Lage sein, meine lokalen bösen Buffer-Marker (m, um einen Ort zu markieren und dann "oder", um dorthin zu springen) über Emacs-Sitzungen / -Instanzen hinweg zu speichern. Ich bin mir nicht sicher, wie ich das machen soll. Ich habe versucht, die Sitzung zu installieren / zu verwenden und sie wie folgt hinzuzufügen:

(add-to-list 'session-locals-include 'evil-markers-alist)

Dies funktioniert jedoch nicht und ich bin mir nicht sicher, was ich sonst noch versuchen soll. Vielen Dank.

noctuid
quelle
Vim speichert standardmäßig automatisch pufferlokale Markierungen auf der Festplatte. Das Böse nicht, weil es die + viminfo- Funktion von Vim nicht emuliert . Haben Sie eine Funktionsanfrage an den Evil Issue Tracker gesendet? Haben sie geantwortet?
unvergesslicheidSupportsMonica
@angelic_sedition wirklich, hier geht es nicht um das Böse, es geht um persistente lokale Puffervariablen. Letzteres ist weitaus allgemeiner und nützlicher, und die Antwort interessiert mich sehr. Ich habe ein Tag für Ihre Frage erstellt.
PythonNut
@ PythonNut Nun, ich habe festgestellt, dass das Problem speziell bei den Markern liegt (glaube ich). Sowohl desktop als auch session.el speichern lokale Puffervariablen für den Evil-Marker-Alist, aber sie stimmen nicht mit dem tatsächlichen Wert überein (etwa (108. # <Marker bei 54991 in file.org>) wird weggelassen). Ich denke, das liegt daran, dass sie nicht wissen oder nicht wissen, wie sie ein Markierungsobjekt speichern sollen.
Noctuid
1
Ab Mai 2017 ist es eine offene Ausgabe .
Mirzhan Irkegulov

Antworten:

1

Hier ist meine Lösung: Geben Sie den folgenden Code in Ihre .emacs oder .spacemacs ein.

Sie müssen den Markierungsnamen und den Dateinamen in Großbuchstaben manuell in die Zeile einfügen: evil-add-to-alist. Ich habe auch evil-goto-mark modifiziert, um einen Fehler zu beheben, der durch das direkte Setzen von evil-marker-alist verursacht wurde. Der alte Code geht davon aus, dass der Puffer geschlossen wurde, wenn der Marker ein Nachteil ist. (Wenn der Puffer geschlossen ist, wird der Marker in Nachteile umgewandelt).

  (setq alist (default-value 'evil-markers-alist))
  (evil-add-to-alist 'alist ?E '("/path/to/yourfile" . 1))
  (setq-default evil-markers-alist alist)

  (evil-define-command evil-goto-mark (char &optional noerror)
    "Go to the marker specified by CHAR."
    :keep-visual t
    :repeat nil
    :type exclusive
    (interactive (list (read-char)))
    (let ((marker (evil-get-marker char)))
      (cond
       ((markerp marker)
        (switch-to-buffer (marker-buffer marker))
        (goto-char (marker-position marker)))
       ((numberp marker)
        (goto-char marker))
       ((consp marker)
        (when (or (and (find-buffer-visiting (car marker))
                       (switch-to-buffer (find-buffer-visiting (car marker)) )
                       )
                  (and (y-or-n-p (format "Visit file %s again? "
                                         (car marker)))
                       (find-file (car marker))))
          (goto-char (cdr marker))))
       ((not noerror)
        (user-error "Marker `%c' is not set%s" char
                    (if (evil-global-marker-p char) ""
                      " in this buffer"))))))
  )
Hao Deng
quelle
Ich habe vergessen zu erwähnen, dass dies nur für globale Marker funktioniert. (Großbuchstaben)
Hao Deng
1

desktop.el unterstützt das Speichern / Wiederherstellen von Markern (zumindest jetzt). (add-to-list 'desktop-locals-to-save 'evil-markers-alist)oder (cl-pushnew 'evil-markers-alist desktop-locals-to-save)für mich arbeiten.

noctuid
quelle