簡體   English   中英

如何在Emacs Dired的子目錄中創建文件?

[英]How can I create a file in a sub-directory in Emacs Dired?

我使用dired瀏覽帶有i的目錄及其子目錄( dired-maybe-insert-subdir

當光標位於子目錄中並且我執行Cx Cf ,默認目錄是緩沖區的根目錄,是否可以更改該目錄?

因此,如果我訪問/ foo / bar,然后在bar的緩沖區中插入/ foo / bar / baz的內容並將光標放在此處,則當我要求訪問文件時,使用/foo/bar/baz/獲得一個迷你緩沖區(使用默認的快捷鍵綁定或其他快捷鍵,這對我來說無關緊要)。

以下是我自己的解決方案。

(defun dired-subdir-aware (orig-fun &rest args)
  (if (eq major-mode 'dired-mode)
      (let ((default-directory (dired-current-directory)))
        (apply orig-fun args))
    (apply orig-fun args)))

(advice-add 'find-file-read-args :around 'dired-subdir-aware)

我剛剛學習了如何使用建議功能來擴展現有功能(和宏)。 請參閱(省略號)建議功能

現在,如果您轉到dired下的子目錄並運行Cx Cf ,將提示您輸入正確的路徑。

更新

最近,我開始和(ido)Top一起玩。 在定義了dired-subdir-aware ,我可以使用以下代碼輕松擴展ido-find-file以識別subdir。

(dolist (fun '(find-file-read-args ido-expand-directory))
  (advice-add fun :around 'dired-subdir-aware))

不, default-directory是緩沖區本地的,而不僅僅是緩沖區的一部分。 這是設計使然,無法更改它。

但是您當然可以定義一個命令,該命令選擇subdir目錄,然后在讀取文件名進行訪問時將default-directory綁定到該default-directory ,等等。

例如,此命令將讀取一個文件名,默認目錄為您想要的文件名,然后訪問該文件:

(defun foo (file)
  "..."
  (interactive
   (let ((default-directory  (dired-current-directory)))
     (list (read-file-name "File: "))))
  (find-file file))

而且,開箱即用,您當然可以在另一個Dired緩沖區中訪問子目錄,該default-directory是您想要的default-directory 諸如dired-do-find-marked-filesF )和dired-display-fileCo )之類的命令可以做到這一點。

但是,為什么要讓default-directory反映您所在列表default-directory 您的用例是什么?

我完善了Drew對一個功能的回答 ,該功能完全滿足我的要求:

(defun dired-find-file ()
  "Find a file in the current dired directory"
  (interactive)
  (let ((default-directory (dired-current-directory)))
    (find-file (read-file-name "Find file:"))))

然后,我將此功能綁定到方便的組合鍵:

(add-hook 'dired-mode-hook
   (lambda ()
     (local-set-key (kbd "C-x M-f") 'dired-find-file)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM