20

ファイルツリーは次のとおりです。

- foo
  - lorem
    - ipsum <-
  - baz <-
- bar
- baz

現在アクセスしているファイルはipsumです。bazここで、最初のディレクトリとそれが 含まれているディレクトリを見つけたいと思います ipsum。elispからツリーを上に移動するにはどうすればよいですか?

4

2 に答える 2

32

あなたが欲しいlocate-dominating-file

于 2013-01-07T14:00:12.477 に答える
18
(defun parent-directory (dir)
  (unless (equal "/" dir)
    (file-name-directory (directory-file-name dir))))

(defun find-file-in-heirarchy (current-dir fname)
  "Search for a file named FNAME upwards through the directory hierarchy, starting from CURRENT-DIR" 
  (let ((file (concat current-dir fname))
        (parent (parent-directory (expand-file-name current-dir))))
    (if (file-exists-p file)
        file
      (when parent
        (find-file-in-heirarchy parent fname)))))

file-name-directory結果がnilでない場合は、次のようにを使用してファイルのディレクトリを抽出できます。

(let ((file (find-file-in-heirarchy (buffer-file-name) "baz")))
  (when file
    (file-name-directory file)))
于 2012-12-31T02:08:36.533 に答える