나는 사용 ido-mode
하지만, 내가 싫어하는 한 가지는 키를 C-x C-f
사용 up/down
하여 최근에 열린 파일을 순환 할 수 없다는 것 입니다 iswitchb
. ido
이런 식으로 작동하도록 어떻게 설정할 수 있습니까?
나는 사용 ido-mode
하지만, 내가 싫어하는 한 가지는 키를 C-x C-f
사용 up/down
하여 최근에 열린 파일을 순환 할 수 없다는 것 입니다 iswitchb
. ido
이런 식으로 작동하도록 어떻게 설정할 수 있습니까?
답변:
ido-mode
( M-x customize-group
RET ido
RET) 에 대한 사용자 정의 옵션을 살펴보면 설명하는 순환 동작을 활성화하기위한 옵션이 표시되지 않습니다.
그러나 init 파일에 다음을 추가 할 수 있습니다.
(require 'recentf)
(defun ido-recentf-open ()
"Use `ido-completing-read' to find a recent file."
(interactive)
(if (find-file (ido-completing-read "Find recent file: " recentf-list))
(message "Opening file...")
(message "Aborting")))
(global-set-key (kbd "C-x C-r") 'ido-recentf-open)
이 위치 C-x C-r에서을 누르면 최근에 연 파일을 선택하기 위해 Ido 완료를 얻을 수 있습니다.
기본적으로 20 개의 최신 파일이 기록에 유지됩니다. 다음과 같이 설정하여 150과 같은 수준으로 올리는 것이 좋습니다 recentf-max-saved-items
.
(setq recentf-max-saved-items 150)
많은 곳에서 언급되지는 않았지만 Ido Virtual Buffers를 사용하면 최근 파일에 쉽게 액세스 할 수 있습니다. 다음과 같이 활성화하십시오.
(setq ido-use-virtual-buffers t)
당신이 얻는 행동은 다음과 같습니다.
그렇지 않은 경우
nil
기존 버퍼뿐만 아니라 과거 ( "가상") 버퍼를 참조하십시오.기본적으로 다음과 같이 작동합니다. 파일을 방문 중이고 버퍼가 정리된다고 가정하십시오
midnight.el
. 나중에 해당 버퍼로 전환하려고하지만 더 이상 열려 있지 않은 것을 찾으십시오. 가상 버퍼를 사용하면 버퍼 이름이 버퍼 목록에 유지되며 (ido-virtual
얼굴을 사용 하고 항상 끝 부분에 있음)이를 선택하면 파일이 다시 백업됩니다. 이를 통해 최근에 연 파일이 아직 열려 있는지에 대해 덜 생각할 수 있습니다. 대부분의 경우 Emacs를 종료하고 다시 시작한 다음 이전과 같이 열려 있던 파일 버퍼로 전환 할 수 있습니다.
C-x C-r
새 파일을 열 수 없으므로 마음에 들지 않습니다 . 또한 간단한 방법으로 사용자 정의 할 수 없다는 것에 놀랐습니다. 의 역사는 아직 C-x C-f
구현되지 않은 이유를 이해할 수없는 분명한 기능입니다 ido
. 예를 들어 M-x up/down
최근 명령을 통한주기, M-% up/down
최근 쿼리 교체를 통한주기, emacs 외부에서도 가능합니다. bash 또는 zsh와 같은 모든 쉘은 위 / 아래를 사용하여 이전 명령을 호출합니다. 나를 위해 C-x C-f up/down
최근에 열린 파일을 순환해야합니다. 마침표.
ido-use-virtual-buffers
1-기본 IMO에서 실제로 켜져 있어야하는 훌륭한 기능입니다.
바인딩은 오늘로, 시간이 지남에 따라 진화하지만, 당신이 호출 할 때 ido-find-file
또는 ido-find-file-read-only
, 당신은 기본 구성에서 사용할 수있는 다음과 같은 바인딩을 사용할 수 있습니다 :
ido-prev-work-file
ido-next-work-file
이들 외에도이 같은 인체 공학적으로 쾌적한없는에서 M-p와 M-n내가 시도하기 전에에 사용 된 바인딩 이도을 , 그들은 천천히도있어, 그리고 그에 따른 미니 버퍼의 수다는 산만하고 혼란. ido 는 최근에 연 파일 이름을 보여주는 것 이상의 것을 수행합니다. 더 이상 존재하지 않는 파일의 이름을 제공하는 것을 꺼려하여 " ' 파일 이름 '... '검색 중"이라고보고 합니다.
"검색 중"메시지는 기능에서 나옵니다 ido-make-merged-file-list
. 소스를 읽으면 이 기능이 수행하는 모든 마법을 비활성화 할 수있는 방법이 없습니다.
당신은 리 Y 인드 할 수 ido-prev-work-file
및 ido-next-work-file
더 같은 자연 뭔가 쌍을 C-M-p하고 C-M-n, 또는 현재 스와핑 M-p( ido-prev-work-directory
)와 M-n( ido-next-work-directory
이 경우) 바인딩을.
여기에 복원 할 이맥스 리스프 코드 M-p와 M-n에 기본 디렉토리에 초점을 맞춘 바인딩을 이동, 최근 파일을 통해 순환 C-M-p과 C-M-n각각은 :
(add-hook 'ido-setup-hook
(lambda ()
(let ((kmap ido-file-dir-completion-map))
(let ((key '(meta ?n)))
(define-key kmap (vector (cons 'control key))
(lookup-key kmap (vector key)))
(define-key kmap (vector key) 'ido-next-work-file))
(let ((key '(meta ?p)))
(define-key kmap (vector (cons 'control key))
(lookup-key kmap (vector key)))
(define-key kmap (vector key) 'ido-prev-work-file)))))
@itsjeyd의 대답은 매우 완전합니다. 함수를 제안하겠습니다.
(defun ido-choose-from-recentf ()
"Use ido to select a recently visited file from the `recentf-list'"
(interactive)
(find-file (ido-completing-read "Open file: " recentf-list nil t)))
;; bind it to "C-c f"
(global-set-key (kbd "C-c f") 'ido-choose-from-recentf)
씨의 WikEmacs
helm-for-files
파일 이름 자동 완성 및 멋진 검색 인터페이스를 위해 위의 답변 중 더 나은 방법을 찾았습니다 . 또한 원하는 검색 항목을 포함하도록 구성 할 수 있습니다.