Tôi có thể xem trong Emacs các thuộc tính của tệp mà tôi đã mở không?


9

Tôi đã mở một tập tin trong Emacs. Tôi muốn xem thông tin về tệp đó, chẳng hạn như ngày tạo, kích thước, v.v. trong Emacs. Có một phím tắt hoặc bất kỳ lệnh Emacs cho điều đó? Cảm ơn.


C-x d RETsẽ mở diredtrong thư mục của tập tin đã truy cập. Nó sẽ không hiển thị thông tin cụ thể về tệp đã truy cập, nhưng tất cả các tệp trong thư mục.
JRM

1
Làm thế nào về ?: M-x eval-expression RET (dired-other-window buffer-file-name) RET Lệnh chuyển đổi cho "ls" mà dired sử dụng là tùy chỉnh.
luật

Bạn cũng có thể đặt nó trong một chức năng và thêm một liên kết phím. (defun file-info () (interactive) (dired-other-window buffer-file-name)) (global-set-key (kbd "C-c d") 'file-info)
JRM

1
Tôi sẽ khuyến khích @jrm đăng câu trả lời tương tự như nhận xét ở trên bao gồm biến giới hạn cho phép để dired-listing-switchesOP có thể hiển thị bất kỳ thuộc tính tệp nào mà phiên bản "ls" áp dụng hỗ trợ.
luật

Cảm ơn bạn cho tất cả các ý kiến ​​và nỗ lực. Một trong những gợi ý của jrm làm việc ra khỏi hộp.
Romario

Câu trả lời:


9

Đây là một lệnh sử dụng diredvới cờ tập tin dài dòng cho lslệnh. Bạn có thể muốn tùy chỉnh các cờ đó tùy thuộc vào hệ điều hành của bạn.

(defun file-info ()
  (interactive)
  (let ((dired-listing-switches "-alh"))
    (dired-other-window buffer-file-name)))

Tạo một keybinding theo ý thích của bạn.

(global-set-key (kbd "C-c d") 'file-info)

1
Cảm ơn bạn cho tất cả các ý kiến ​​và câu trả lời. Điều này làm việc mà không có bất kỳ vấn đề. Tôi đã sao chép nó vào ~ / .emacs và nó bắt đầu hoạt động.
Romario

11

Dường như không có lệnh nào để có được thông tin này một cách tương tác, mặc dù bạn có thể sử dụng được chuyển hướng như @jrm gợi ý.

Bạn có thể lấy thông tin này với mã elisp sau:

(file-attributes (buffer-file-name))

Điều này sẽ trả về một danh sách như thế này:

(nil 1 "lh" "users"
  (20614 64019 50040 152000)
  (20000 23 0 0)
  (20614 64555 902289 872000)
  122295 "-rw-rw-rw-"
  t (5888 2 . 43978)
  (15479 . 46724))

Dòng đầu tiên cung cấp cho bạn "người dùng" UID "lh" và GID.

Ba dòng tiếp theo là lần truy cập, sửa đổi và thay đổi trạng thái cuối cùng, được định dạng dưới dạng danh sách. Bạn có thể chuyển đổi chúng thành các chuỗi có thể đọc được bằng current-time-string:

(current-time-string '(20614 64019 50040 152000))

Trong trường hợp này, giá trị trả về là "Thứ ba ngày 23 tháng 10 16:12:03 2012". Cùng với đó, bạn có thể xây dựng chức năng của riêng mình để trích xuất bất kỳ bit nào bạn quan tâm. Nếu bạn chỉ muốn xem dữ liệu meta trong xe buýt nhỏ, điều này sẽ hiển thị cho bạn:

(defun file-metadata ()
  (interactive)
  (let* ((fname (buffer-file-name))
         (data (file-attributes fname))
         (access (current-time-string (nth 4 data)))
         (mod (current-time-string (nth 5 data)))
         (change (current-time-string (nth 6 data)))
         (size (nth 7 data))
         (mode (nth 8 data)))
    (message
     "%s:
  Accessed: %s
  Modified: %s
  Changed: %s
  Size: %s bytes
  Mode: %s"
     fname access mod change size mode)))

Gọi điều này tương tác tạo ra:

/home/tws/org/hk.org:
  Accessed: Mon May 30 09:38:29 2016
  Modified: Thu Apr 21 11:59:06 2016
  Changed: Wed May 18 16:09:31 2016
  Size: 7508 bytes
  Mode: -rwxr-xr-x

Thêm chi tiết trong Thuộc tính tệp thủ công (elisp).


Cảm ơn bạn đã trả lời. Nhưng tôi không biết hoặc không thể quản lý để nhập mã đầu tiên: (thuộc tính tệp (tên tệp đệm)) Tôi đoán nó nên được nhập vào bên trong bộ thu nhỏ nhưng làm cách nào để chuyển sang bộ thu nhỏ? Tôi biết Cg để tắt nhưng không biết cách chuyển đổi.
Romario

Để chạy mã elisp trong bộ thu nhỏ, hãy nhập M-:. Bạn sẽ thấy Eval: trong xe buýt nhỏ, và sau đó bạn có thể nhập mã. Đối với defun, (defun file-metadata...bạn có thể thử điều đó bằng cách dán nó vào bộ đệm đầu và với điểm bên trong chức năng gõ M-C-x. Sau đó, bạn có thể gọi hàm với M-x file-metadata.
Tyler

Ops, yeah mà làm việc ra. Này thật hữu ích. Như bạn đã chỉ ra, nó liệt kê các thuộc tính tệp ở dạng nguyên gốc và với các hàm chuyển đổi, có thể trích xuất một số thông tin chi tiết hơn về tệp. Tôi sẽ chọn câu trả lời này là (rất) hữu ích. Cảm ơn!
Romario
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.