Emacs 버퍼의 디렉토리 바로가기

Emacs 버퍼의 디렉토리 바로가기

그래서 내가 묻는다이 문제셸의 디렉터리 바로 가기 정보. 아이디어는 /home/Documents/foo를 입력하여 파일을 열 수 있기를 원한다는 것입니다 C-x C-f ~foo/file.

그렇다면 emacs 버퍼에서 zsh의 "명명된 디렉터리"를 에뮬레이트하는 방법이 있습니까?

그런데 제가 사용하고 싶은 바로가기 정의는 이미 .zshrc에 있습니다. 직접 읽을 수 있는 솔루션이 있다면 보너스 포인트입니다.

답변1

~파일 이름 확장을 담당하는 Emacs 구성 요소는 expand-file-name불행하게도 C로 작성되었으며 그 내부의 코드는 다음이 ~사용자 이름이라고 가정합니다. 다행스럽게도 Emacs에는 함수 주위에 래퍼를 추가하는 일반적인 방법이 있으므로 내장 함수에서 일부 논리를 반복해도 괜찮다면 원하는 작업을 수행할 수 있습니다.

계속하는 데 도움이 될 완전히 테스트되지 않은 코드는 다음과 같습니다. 자세한 내용은 Emacs Lisp 매뉴얼의 "Emacs Lisp 함수 조언"을 참조하세요. 기본 아이디어는 defadvice실제 코드 전에 실행할 코드를 추가하는 것 입니다 expand-file-name. 내 댓글에서 내가 필연적으로 저지르는 실수를 지적해 주세요(수정 방법을 알고 있는지 여부).

(defvar expand-file-name-custom-tilde-alist
  '(("foo" . "/home/Documents/foo")))

(defadvice expand-file-name (before expand-file-name-custom-tilde
                             (name &optional default-directory)
                             activate compile)
  "User-defined expansions for ~NAME in file names."
  (save-match-data
    (when (string-match "\\`\\(\\(.*/\\)?~\\([^:/]+\\)\\)/" name)
      (let ((replacement (assoc (match-string 3 name) expand-file-name-custom-tilde-alist)))
        (when replacement
          (setq name (replace-match (cdr replacement) t t name 1)))))))

.zshrc채워질 바로가기 expand-file-name-custom-tilde-alist(또는 별칭을 동기화하기 위해 선택한 기술)를 구문 분석 하는 연습으로 남겨두겠습니다 .

답변2

미니 버퍼 $foo대신 사용하세요 . ~fooEmacs는 이것을 foo환경 변수의 이름으로 취급하고 그 값을 사용합니다.

관련 정보