楽しみのために、ディレクトリ変数に基づく、根本的に異なるアプローチについて説明しましょう。
つまり、以下を含むwork-directory/
名前のファイルを配置します。.dir-locals.el
((nil . ((eval . (set (make-local-variable 'backup-directory-alist)
(list (cons "."
(file-relative-name
(file-name-directory (buffer-file-name))
(file-name-directory (file-truename
(buffer-file-name)))))))))))
これが行うことはbackup-directory-alist
、work-directory/
. そのローカル バージョンは、バックアップ ファイルが 内に保持されていることを確認しますwork-directory
。
そのためには、次の 2 つのことが必要です。
'(("." . "path/to/work-directory/"))
ローカル値のようなものを持つ
- このパスが相対であることを確認してください
location_a/
2 番目のポイントの理由は、他の場所で述べたように、backup-buffer
シンボリック リンクが解決されると、実際のファイルの場所が の開始点になるためです。また、バックアップ ファイルの形状を変更せずに絶対パスを単純に配置することはできません (バックアップ ディレクトリの絶対パスの場合、バックアップ ファイル名は完全なパスをエンコードするため、衝突は発生しません)。
ノート:
- 特定のローカル変数が に記録されていることを確認する必要があります
safe-local-variable-values
。これは一般的なフォームなので、1 回限りの作業です (最初に尋ねられたときに「!」を押すだけです)。
- これは nil に設定されていることを前提
find-file-visit-truename
としていますが、そうでない場合はその質問をしないと思います:)
このアプローチの長所:
- アドバイスは必要ありません(これは常に良いことです)
- Emacsがディレクトリ変数をサポートしていると仮定しますが、適度に移植可能です
- 必要な場所にのみ配置できる柔軟性を維持できます
アプローチの短所:
.dir-locals.el
まあ、明らかに、いくつかの場所でそれをコピーする必要があるかもしれません
また、ワンショットのアプローチが必要な場合は、次のようにもっと簡単にすることができます。
((nil . ((backup-directory-alist (("." . "../path/to/work-directory"))))))
実際に相対名を自分で計算する場所は、一度限りです。