Here is my solution: Put below code in your .emacs or .spacemacs.
You'll need manually put upper-case marker name and file name at line: evil-add-to-alist. I also modified evil-goto-mark to fix a bug that introduced by set evil-markers-alist directly. The old code assume when the marker is a cons, the buffer has been closed. (when buffer closed, it convert marker to cons).
(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")))))) )