ido-mode에서 최근에 연 파일


12

나는 사용 ido-mode하지만, 내가 싫어하는 한 가지는 키를 C-x C-f사용 up/down하여 최근에 열린 파일을 순환 할 수 없다는 것 입니다 iswitchb. ido이런 식으로 작동하도록 어떻게 설정할 수 있습니까?

답변:


16

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를 종료하고 다시 시작한 다음 이전과 같이 열려 있던 파일 버퍼로 전환 할 수 있습니다.


지금까지 내가 upvoted했습니다, 나는 그것을 테스트하고 그것이 어떻게 작동하는지 이해할 때 나중에 동의합니다. (리스프에 대한 나의 이해는 매우 열악합니다).
WeSenseASoulInSearchOfAnswers

@WeSenseASoulInSearchOfAnswers 물론, 시간이 걸립니다. 내가 게시 한 코드에 대해 궁금한 점이 있으면 알려주세요.
itsjeyd

수락했지만 솔직히 말하면 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최근에 열린 파일을 순환해야합니다. 마침표.
WeSenseASoulInSearchOfAnswers

@WeSenseASoulInSearchOfAnswers 동의합니다. 이것이 왜 제공되지 않거나 사용자 정의 할 수 없는지 잘 모르겠습니다. 개인적으로는 대답에 설명 된 가상 버퍼 기능을 사용하기 때문에 별 문제가되지 않으므로 최근 파일로 전환하는 것은 다른 버퍼로 전환하는 것과 같습니다. 정말 쉽습니다. 그러나 사용하는 기능을 사용할 수 없으면 실망 할 수 있음을 이해합니다.
itsjeyd

5
+ ido-use-virtual-buffers1-기본 IMO에서 실제로 켜져 있어야하는 훌륭한 기능입니다.
Jon O.

2

바인딩은 오늘로, 시간이 지남에 따라 진화하지만, 당신이 호출 할 때 ido-find-file또는 ido-find-file-read-only, 당신은 기본 구성에서 사용할 수있는 다음과 같은 바인딩을 사용할 수 있습니다 :

  • M-o 호출 ido-prev-work-file
  • C-M-o 호출 ido-next-work-file

이들 외에도이 같은 인체 공학적으로 쾌적한없는에서 M-pM-n내가 시도하기 전에에 사용 된 바인딩 이도을 , 그들은 천천히도있어, 그리고 그에 따른 미니 버퍼의 수다는 산만하고 혼란. ido 는 최근에 연 파일 이름을 보여주는 것 이상의 것을 수행합니다. 더 이상 존재하지 않는 파일의 이름을 제공하는 것을 꺼려하여 " ' 파일 이름 '... '검색 중"이라고보고 합니다.

"검색 중"메시지는 기능에서 나옵니다 ido-make-merged-file-list. 소스를 읽으면 이 기능이 수행하는 모든 마법을 비활성화 할 수있는 방법이 없습니다.

당신은 리 Y 인드 할 수 ido-prev-work-fileido-next-work-file더 같은 자연 뭔가 쌍을 C-M-p하고 C-M-n, 또는 현재 스와핑 M-p( ido-prev-work-directory)와 M-n( ido-next-work-directory이 경우) 바인딩을.

여기에 복원 할 이맥스 리스프 코드 M-pM-n에 기본 디렉토리에 초점을 맞춘 바인딩을 이동, 최근 파일을 통해 순환 C-M-pC-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)))))

1
Emacs SE에 오신 것을 환영합니다! 답은 원래 포스터의 질문에 집중하십시오. "미니 버퍼 채터"에 대한 당신의 의견은 흥미롭고 관련이 있지만, 질문에 대한 실제 답변을 찾는 데 방해가됩니다. 더 중요한 것은 : 대답의 형식으로 대답을 표현하십시오. 당신이 쓴 것은 주석과 같은데,이 같은 Q & A 사이트에는 적합하지 않습니다.
파프리카

첫 번째 단락과 다음 목록은 최근 열린 파일을 순환하는 키를 찾는 원래 질문에 대한 답변입니다. 이러한 바인딩은 기본적으로 존재하지만 다른 바인딩에서는 이러한 바인딩에 대해 언급하지 않았습니다. 리 바인딩 코드를 작성 중이며 만족하면 답변에 포함시킬 것입니다.
seh

2

이 경우 내가 의지했던 것은 idomode에서 Cf를 입력하여 정상적인 미니 버퍼 동작으로 돌아가는 것입니다. 그런 다음 정상적인 기록 탐색 키가 있습니다. 미리 알면 빠를 수 있습니다 : Cxff :-)


1

@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


1

helm-for-files파일 이름 자동 완성 및 멋진 검색 인터페이스를 위해 위의 답변 중 더 나은 방법을 찾았습니다 . 또한 원하는 검색 항목을 포함하도록 구성 할 수 있습니다.


1
@Drew helm에는 ido 모드 자체가 있습니다. 사람들이이 게시물을 검색 할 때 대부분의 경우 문제를 해결하기위한 다른 대안을 알고 싶어 할 것입니다.
user10375
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.