Как сохранить злые маркеры?

10

Я хочу иметь возможность сохранять в буфере локальные маркеры зла (m, чтобы отметить местоположение, а затем 'или `, чтобы перейти к нему) в сеансах / экземплярах emacs. Я не совсем уверен, как это сделать. Я попытался установить / использовать сессию и добавить их так:

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

Это не работает, хотя, и я не уверен, что еще попробовать. Спасибо.

совка
источник
Vim автоматически сохраняет локальные маркеры буфера на диск по умолчанию. Зло нет, потому что оно не эмулирует функцию Vim + viminfo . Вы отправили запрос на добавление функции в зловещий трекер? Они ответили?
незабываемыйПоддержкаMonica
@angelic_sedition на самом деле, дело не в зле, а в постоянных буферных локальных переменных. Последнее гораздо более общее и полезное, и я весьма заинтересован в ответе. Я создал тег для вашего вопроса.
PythonNut
@PythonNut Ну, я обнаружил, что проблема именно с маркерами (я думаю). И desktop, и session.el хранят локальные переменные буфера для evil-markers-alist, но они не заканчивают тем, что соответствуют фактическому значению (ничего подобного (108. # <Маркер в 54991 в file.org>) опущен). Я предполагаю, что это потому, что они не могут или не знают, как сохранить маркерный объект.
совка
1
По состоянию на май 2017 года это открытый вопрос .
Миржан Иркегулов

Ответы:

1

Вот мое решение: поместите приведенный ниже код в свои .emacs или .spacemacs.

Вам нужно будет вручную указать имя маркера в верхнем регистре и имя файла в строке: evil-add-to-alist. Я также изменил evil-goto-mark, чтобы исправить ошибку, которая была напрямую введена set evil-markers-alist. Старый код предполагает, что когда маркер является минусом, буфер был закрыт. (когда буфер закрыт, он конвертирует маркер в минусы).

  (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"))))))
  )
Хао Дэн
источник
Я забыл упомянуть, что это работает только для глобального маркера. (верхний регистр)
Хао Дэн
1

desktop.el поддерживает сохранение / восстановление маркеров (теперь по крайней мере). (add-to-list 'desktop-locals-to-save 'evil-markers-alist)или (cl-pushnew 'evil-markers-alist desktop-locals-to-save)работать на меня.

совка
источник