내가 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, 차이가 있다면) 유사한 기능, 즉 현재 버퍼에 열려 있는 파일 이름을 삽입하는 간단한 방법을 기대했습니다 .
내가 하고 싶은 일의 예
여기서는 이러한 단축키가 필요하다고 느낄 때 더 잘 설명하기 위해 몇 가지 기본 사용 사례를 설명합니다.
컴파일: emacs를 입력하면
M-x compile
컴파일 명령을 입력하라는 메시지가 표시됩니다.gcc (current-buffer)
쉽게 들어가고 싶다 .파일 로드: .emacs 파일을 편집할 때 즉시 로드하여 변경 사항을 테스트하고 싶습니다. 제가 하는 방식은
M-x load-file
항상 이름을 철자로 말하는 것 입니다 . e m a c s. 지름길이 있다고 생각합니다.외부 프로세스 시작:
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