그래서 내가 묻는다이 문제셸의 디렉터리 바로 가기 정보. 아이디어는 /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
대신 사용하세요 . ~foo
Emacs는 이것을 foo
환경 변수의 이름으로 취급하고 그 값을 사용합니다.