2009-03-03 4 views
8

find 파일을 호출하여 새 파일을 열면 찾고있는 파일이 이미로드 한 디렉토리 중 하나에있는 경우가 일반적입니다.Emacs 찾기 파일 기록을 변경할 수 있습니까?

이상적으로 위/아래 화살표를 사용하여 기록을 스크롤하고 싶습니다.

이 문제는 이미 디렉토리에서 10 개의 파일을로드 한 경우 파일이있는 새 디렉토리를보기 전에 동일한 디렉토리에있는 10 개의 파일을 모두 통과해야한다는 것입니다.

결국 나는 종종 디렉토리를 다시 입력하거나 xterm에서 잘라내거나 붙여 넣기 만합니다.

find-file 명령에서 위/아래 화살표의 동작을 파일 대신 디렉터리를 반복하도록 변경할 수 있습니까?

또는 파일을로드 할 때 가장 최근에 방문한 버퍼 순서와 일치하도록 파일 순서를 변경할 수 있습니까?

+0

역사 브라우징 아니, 화살표 키와 함께 작동 등 마지막 사용의 순서로 액세스 할 수 있습니까?(나는 당신이 가지고있는 문제가 주문과 관련이 있다는 것을 깨닫는다.) –

답변

4

내 첫 번째 대답은 '찾을 파일에서 예상대로 TAB 완료가 더 이상 일을하는 동작에서 고통을하지 ... 조금 까다 롭습니다. 그러나이 기술은 여전히 ​​유용합니다 (그리고 당신이 그것을 좋아한다면, 바람직합니다).

그러나이 솔루션의 내역은 동일하지만 'find-file'내에 예상대로 TAB 완성을 유지합니다.

find-file을 조언하는 것을 피하는 방법이 있는지 알고 싶지만 'find-file이 호출되었다는 지식을 준 내성 검사를 찾을 수 없습니다.

(defadvice find-file (around find-file-set-trigger-variable protect activate) 
    "bind a variable so that history command can do special behavior for find-file" 
    (interactive (let (inside-find-file-command) (find-file-read-args "Find file: " nil))) 
    ad-do-it) 

(defadvice next-history-element (around next-history-element-special-behavior-for-find-file protect activate) 
    "when doing history for find-file, use the buffer-list as history" 
    (if (boundp 'inside-find-file-command) 
     (let ((find-file-history (delq nil (mapcar 'buffer-file-name (buffer-list)))) 
      (minibuffer-history-variable 'find-file-history)) 
     ad-do-it) 
    ad-do-it)) 
+0

이 해결책은 아래쪽과 위쪽이 보완 적이 지 않은 불쾌한 부작용이있다. 업로 트를 사용하여 원하는 파일을 순환하면 다운로운을 누르면 방금 순환 한 목록에서 되돌아 가지 않습니다! – EoghanM

+0

나는 그것이 사실이라고 생각하지 않습니다. 'next-history-element advice'에 중단 점을 설정하면, 위 또는 아래 화살표 키를 누를 때 호출되는 것을 볼 수 있습니다. 아마도 당신의 열쇠가 다르게 묶여 있을까요? –

+0

이상한 키 바인딩이 없다고 생각합니다. 다른 '이전 이력 요소'기능을 만들 때 위쪽 화살표와 아래쪽 화살표가 서로의 역인 것처럼 보입니다. – EoghanM

1

원하지 무엇을, 그러나

는 (전기 버퍼 목록) Ctrl 키-X Ctrl 키-B를 시도?

또는 (dired)?

1

이렇게하면 원하는 버퍼 목록의 기록 목록이 사용됩니다. 탭이 (이미 파일을 열어), 그리고 당신이 지정하고있는 디렉토리에서 사용할 수있는 파일을 통해 역사를 통해 완료하기 때문에

(setq read-file-name-function 'my-read-file-name) 
(defun my-read-file-name (prompt dir default-filename mustmatch initial predicate) 
    (let ((default-directory dir) 
     (files (directory-files dir)) 
     (history (delq nil (mapcar 'buffer-file-name (buffer-list))))) 
    (completing-read prompt files predicate mustmatch initial 'history))) 

는 흠 ...이 발견 파일의 TAB 완성의 동작을 변경합니다. 같은 시간에 일을 모두 얻기

4

나는 IDO을 제안합니다. 버퍼 목록이나 찾기 파일에서 검색 할 수 있습니다. 찾기 파일에서 검색 할 때 현재 폴더에 일치하는 항목이없는 경우 기록을 검색합니다.

관련 문제