어떤 기존 명령이 현재 파일 버퍼의 파일 이름을 이와 같이 가져 옵니까?
불행히도 이에 대한 준비된 명령은 없지만 다음과 같이 만들 수 있습니다.
(defun name-of-the-file ()
"Gets the name of the file the current buffer is based on."
(interactive)
(insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))
마법은 미니 버퍼 선택 창 기능에 있습니다. 미니 버퍼가 활성화되기 전에 마지막 버퍼를 선택하여 올바른 작업을 수행합니다. 그렇지 않으면 buffer-file-name 만 사용하면 파일 이름 이 미니 버퍼에 들어 가지 않습니다. 흥미롭게도 동일한 함수를 일반 버퍼 또는 미니 버퍼에서 사용하여 파일 이름을 삽입 할 수 있습니다. 특별한 치료가 필요하지 않습니다.
기본 키 바인딩은 무엇입니까?
아무것도 없지만 편리한 것을 골라서 다음과 같이 지정할 수 있습니다.
(global-set-key (kbd "C-c f") 'name-of-the-file)
위의 lisp 코드 라인을 init.el 파일에 넣으십시오.
이것은 대부분의 사소한 경우에 작동하지만이 기능을 호출 할 때 어떤 모드에서 어떤 충돌이 있을지 예측하기 어렵습니다.
버퍼가 스크래치 버퍼와 같은 유효한 파일 이름을 방문하지 않으면 어떻게됩니까? 그런 다음이 오류가 에코 영역에 표시됩니다.
name-of-the-file: Wrong type argument: char-or-string-p, nil
바로 가기를 호출하기 전에 올바른 파일 이름으로 유효한 버퍼를 선택하면 이러한 오류가 발생하지 않습니다.
위와 같은 몇 가지 다른 솔루션이 있지만 충돌에 대한 예외 또는 재정의 처리 방법이 주로 다릅니다. 예를 들어, 일부는 모드 훅을 사용하여 특정 모드에서만이 기능을 사용할 수 있습니다.
M-n
. 모든 곳에서 작동하지는 않지만 많은 곳에서 작동합니다. 또한 당신이 grepping하고 있기 때문에 좀 더 인터랙티브 한 lgrep과 rgrep을 좋아할 것입니다.