2009-03-03 21 views
8

Khi tôi gọi tìm tệp để mở tệp mới, thường xảy ra tệp tôi đang tìm nằm trong một trong các thư mục tôi đã tải.Tôi có thể thay đổi lịch sử tìm tập tin của Emacs không?

Lý tưởng nhất, tôi muốn cuộn qua lịch sử bằng các mũi tên lên/xuống.

Vấn đề với điều này là nếu tôi đã tải 10 tệp từ một thư mục, trước tiên tôi phải chuyển qua mười tệp đó, tất cả trong cùng một thư mục, trước khi tôi thấy thư mục mới chứa tệp của mình.

Cuối cùng, tôi thường chỉ cần nhập lại thư mục hoặc cắt/dán từ thư mục xterm.

trong lệnh tìm tệp, tôi có thể thay đổi hành vi của các mũi tên lên/xuống để lặp qua thư mục thay vì tệp hay không.

Hoặc, tôi có thể thay đổi thứ tự tệp để khớp với thứ tự bộ đệm được truy cập gần đây nhất thay vì khi tôi tải tệp không?

+0

duyệt Lịch sử làm việc với các phím mũi tên, không có?(Tôi nhận ra vấn đề mà bạn có là w/thứ tự) –

Trả lời

4

câu trả lời đầu tiên của tôi bị từ hành vi đó hoàn TAB không còn làm việc như mong đợi trong 'tìm file cùng lúc. Nhưng kỹ thuật này vẫn có vẻ hữu ích (và nếu bạn thích nó, thích hợp hơn).

Tuy nhiên, giải pháp này có cùng hành vi lịch sử, nhưng vẫn duy trì hoàn thành TAB như mong đợi bên trong 'tìm tệp.

Tôi muốn biết liệu có cách nào để tránh tư vấn tìm tệp hay không, nhưng tôi không thể tìm thấy bất kỳ sự mâu thuẫn nào đã cho tôi kiến ​​thức rằng 'tìm tập tin được gọi.

(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

Giải pháp này có tác dụng phụ khó chịu mà xuống và uparrows không bổ sung, ví dụ: nếu bạn vượt qua tập tin bạn muốn bằng cách sử dụng uparrow, nhấn downarrow sẽ không quay trở lại 1 trong danh sách bạn vừa đạp xe qua! – EoghanM

+0

Tôi không thấy đó là trường hợp. Khi tôi đặt điểm ngắt trong lời khuyên 'yếu tố lịch sử tiếp theo', tôi thấy nó được gọi khi tôi nhấn phím mũi tên lên hoặc xuống. Có lẽ các phím của bạn bị ràng buộc khác nhau? –

+0

Tôi không nghĩ rằng tôi có bất kỳ keybindings lạ - khi tôi tạo ra một chức năng 'trước-lịch sử-phần tử' chức năng các mũi tên lên và xuống dường như là nghịch đảo của eachother – EoghanM

1

không phải những gì bạn muốn, nhưng

bạn đã thử (danh sách đệm điện) Ctrl-x Ctrl-b?

hoặc (dired)?

1

Điều này sẽ sử dụng thứ tự danh sách của bộ đệm cho lịch sử, đó là thứ bạn muốn.

(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))) 

Hmmm ... này thay đổi hành vi của hoàn TAB tìm file vì TAB hoàn thành trong lịch sử (đã mở file), và chưa kết thúc các tập tin có sẵn trong thư mục bạn chỉ định.

Bắt cả hai làm việc cùng một lúc là một chút phức tạp hơn ...

4

Tôi đề xuất IDO. Bạn có thể tìm kiếm trong danh sách bộ đệm hoặc trong tập tin tìm kiếm. Khi tìm kiếm trong tập tin tìm kiếm và nó không có kết quả phù hợp trong thư mục hiện tại nó tìm kiếm thông qua lịch sử.

Các vấn đề liên quan