dired 有把光标移动到第一个文件的函数吗?

翻了翻C-h m, 没找到多数mode里可用的" g g "的等价物

纠正下,是第一个文件

像一般的 Buffer,M-< (beginning-of-buffer) 移动光标至开头,自然也就是第一行。

假如你想要的是第一个文件所在位置的话,可以试试:

(defun your-dired-goto-first-file ()
  "移动光标至第一个文件所在的位置."
  (interactive)
  (goto-char (point-min))
  (dired-goto-next-file))
1 个赞

https://fuco1.github.io/2017-05-06-Enhanced-beginning--and-end-of-buffer-in-special-mode-buffers-(dired-etc.).html

更合理的 beginning-of-buffer 版本可以自己写。

用面向对象的 defmethod 定义也可以。


(defun my-special-beg-of-buf (&optional arg)
  (interactive "^P")
  (do-my-special-beg-of-buf (cons major-mode arg)))

(cl-defmethod do-my-special-beg-of-buf (arg)
  (beginning-of-buffer (cdr arg)))

(cl-defmethod do-my-special-beg-of-buf :after ((n (head 'dired-mode)))
              (while (not (ignore-errors (dired-get-filename)))
                (dired-next-line 1)))

(cl-defmethod do-my-special-beg-of-buf :after ((n (head 'ibuffer-mode)))
              (ibuffer-forward-line 1))

(defmacro def-special-beg-buf (name qual &rest body)
  `(cl-defmethod do-my-special-beg-of-buf ,qual
     ((n (head ,(inter (format "%S-mode" name)))))
     ,@body))

(def-special-beg-buf occur :after
  (occur-next 1))

伪代碼,沒实測过能不能用。好处是节约命名空間。