Cách mở tệp trong eshell bằng ký tự đại diện


8

Tôi rất quen với việc gõ vào một cái vỏ như:

emacsclient **/Threshold.java

Trường hợp Threshold.javamột tập tin được lồng sâu trong một thư mục và tôi chỉ muốn mở nó theo tên.

Khi tôi thử điều tương tự trong eshell, tôi nhận được (ec là bí danh cho find-file):

ec **/Threshold.java
Wrong type argument: stringp, ("src/main/java/org/elasticsearch/shield/admin/Threshold.java")

Làm thế nào tôi có thể làm việc này trong eshell?

Câu trả lời:


8
(defun eshell/my-find-file (pattern)
  (mapc #'find-file (mapcar #'expand-file-name pattern)))

sau đó sử dụng my-find-file **/Threshold.javatừ Eshell, nếu bạn cũng muốn my-find-filehỗ trợ mẫu phi toàn cầu (ví dụ my-find-file Threshold.java:), hãy thử làm theo:

(defun eshell/my-find-file (pattern)
  (if (stringp pattern)
      (find-file pattern)
    (mapc #'find-file (mapcar #'expand-file-name pattern))))

4

Thử cái này:

mapcar #'find-file **/Threshold.java

Điều này chỉ hoạt động nếu **/Threshold.javamở rộng đến chính xác một tập tin. Mặt khác, tệp thứ hai sẽ được mở thông qua một đường dẫn tương đối, nhưng dựa trên thư mục của tệp đầu tiên thay vì thư mục nơi lệnh được thực thi.


Điều quan trọng là để eshell ký tự đại diện trở thành gấp đôi *
Yu Shen

1

Tôi đã viết chức năng tiện dụng này:

(defun eshell/for-each (cmd &rest args)
    (let ((fn (intern cmd))
          (dir default-directory))
      (dolist (arg (eshell-flatten-list args))
        (let ((default-directory dir))
          (funcall fn arg)))))

Thông báo xử lý thư mục. Sau đó, bạn có thể gọi, ví dụ for-each find-file **/Threshold.java OtherFileToo.java.

Để mở tập tin từ eshell, tôi sử dụng : alias ff for-each find-file $*.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.