Emacs에서 현재 버퍼의 파일 이름을 얻는 방법은 무엇입니까?

Emacs에서 현재 버퍼의 파일 이름을 얻는 방법은 무엇입니까?

내가 Vim에서 놓친 주요 기능 중 하나는 Vim이 항상 현재 파일의 파일 이름을 버퍼 %(추가 정보). 이를 통해 다음과 같은 명령을 쉽게 시작할 수 있습니다.

;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...

emacs나는 (버전 24, 차이가 있다면) 유사한 기능, 즉 현재 버퍼에 열려 있는 파일 이름을 삽입하는 간단한 방법을 기대했습니다 .

내가 하고 싶은 일의 예

여기서는 이러한 단축키가 필요하다고 느낄 때 더 잘 설명하기 위해 몇 가지 기본 사용 사례를 설명합니다.

  1. 컴파일: emacs를 입력하면 M-x compile컴파일 명령을 입력하라는 메시지가 표시됩니다. gcc (current-buffer)쉽게 들어가고 싶다 .

  2. 파일 로드: .emacs 파일을 편집할 때 즉시 로드하여 변경 사항을 테스트하고 싶습니다. 제가 하는 방식은 M-x load-file항상 이름을 철자로 말하는 것 입니다 . e m a c s. 지름길이 있다고 생각합니다.

  3. 외부 프로세스 시작: du -sh쉘 명령을 실행할 때 바로가기를 사용할 수 있다는 점을 설명하기 위해 예를 들었습니다.M-!

내가 지금까지 찾은 것

  • 이 문제U&L에서. 주어진 대답은 기본적으로 종료 링에 추가할 수 있도록 버퍼의 파일 이름을 찾을 수 있는 위치를 보여줍니다. 이것은 정확히 내가 찾고 있는 것이 아니며 파일 이름을 사용하기 전에 수동으로 삭제하고 싶지 않습니다. (또한 이 두 답변에 설명된 솔루션은 내 emacs에서 잘 작동하지 않는 것 같으며 추가 키 입력이 필요하므로 약간의 고통을 줍니다.)

편집하다: 다소 관련이 없지만 이러한 솔루션이 작동하지 않는 이유를 알아냈습니다. 좋든 나쁘든 IDO를 활성화했습니다.

  • (current-buffer)이것설명서에 설명된현재 버퍼에 있는 파일의 이름을 반환하지만 위에 제공한 예제 중 어느 것도 elisp 코드를 평가하지 않았습니다. 이 함수의 평가 결과를 (미니)버퍼에 삽입하고 이 방법으로 바로가기에 바인딩할 수 있는 방법이 있나요?

제가 이렇게 생각하는 것이 잘못된 걸까요?

수년간 Vim을 사용한 후 현재는 emacs 사용법을 배우고 있습니다(실제로 몇 달이 지났습니다). 예측 가능한 상황을 피하고 싶다Vim과 함께 이맥스 사용하기덫. 내 부탁이 별로 좋지 않다고 생각한다면이맥스-y, 그리고 이를 수행하는 더 나은(더 깨끗한?) 방법이 있어야 합니다. 답변에 이를 언급해 주십시오.

답변1

아래와 같은 것을 함수에 넣고 .emacs원하는 키에 바인딩할 수 있습니다.

(defun insert-file-name ()
  "Insert the full path file name into the current buffer."
  (interactive)
  (insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))

또한보십시오이 문제, 매우 유사해 보입니다.

답변2

약간 다른@easyb대답은 킬 링 경로를 버퍼에 넣는 대신 경로를 복사하는 것입니다(읽기 전용 파일에 유용함).

(defun filename ()   
    "Copy the full path of the current buffer."  
    (interactive)  
    (kill-new (buffer-file-name (window-buffer (minibuffer-selected-window)))))

답변3

(kill-new buffer-filename)다음과 같은 키에 바인딩하면 충분할 것 같습니다. 내 키에는 다음이 있습니다 ~/.emacs.d/init.el.

(global-set-key (kbd "C-c w") (lambda () (interactive) (kill-new buffer-file-name)))

현재 파일 이름을 종료 버퍼에 넣고 싶을 때마다 키를 누른 다음 꺼내고 싶은 곳마다 C-c w일반적인 방법을 사용합니다 .C-y

관련 정보