Emacsで現在のバッファのファイル名を取得するには?

Emacsで現在のバッファのファイル名を取得するには?

私がVimで見逃した主な機能の1つは、Vimが常に現在のファイルのファイル名をバッファー%追加情報)。これにより、次のコマンドを簡単に起動できます。

;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...

emacs私は(バージョン24、違いがある場合)同様の機能、つまり現在バッファに開いているファイル名を挿入する簡単な方法を期待しました。

私がしたいことの例

ここでは、これらのショートカットが必要であると感じたときに、よりよく説明するために、いくつかの基本的なユースケースについて説明します。

  1. コンパイル:emacsと入力すると、M-x compileコンパイルコマンドを入力するように求められます。gcc (current-buffer)簡単に入りたい。

  2. ファイルを読み込む:.emacsファイルを編集するときは、すぐに読み込んで変更をテストしたいと思います。私のやり方は、M-x load-file常に名前をスペルで話すことです. e m a c s。近道があると思います。

  3. 外部プロセスの開始:du -shシェルコマンドを実行するときにショートカットを使用できることを説明するために例を挙げました。M-!

私が今まで見つけたもの

  • この問題U&Lから。与えられた答えは、デフォルトでシャットダウンリングに追加できるようにバッファのファイル名を見つけることができる場所を示しています。これはまさに私が探しているものではなく、ファイル名を使用する前に手動で削除したくありません。 (また、これらの2つの答えで説明されている解決策は私のemacsでうまく機能しないようで、追加のキーストロークが必要なので少し苦しんでいます。)

編集する: やや関連がないが、これらのソリューションが機能しない理由を見つけました。良いか悪いかIDOを有効にしました。

  • (current-buffer)これマニュアルに記載されている現在バッファ内のファイルの名前を返しますが、上記の例のいずれも elisp コードを評価しませんでした。この関数の評価結果を(ミニ)バッファに挿入し、この方法でショートカットにバインドする方法はありますか?

私がこのように考えるのは間違っていますか?

長年Vimを使用した後、現在はemacsの使い方を学んでいます(実際に数ヶ月が過ぎました)。予測可能な状況を避けたいVimでEmacsを使う罠。お願いがあまり良くないと思ったらEmacs-yそして、これを行うより良い(よりきれいな?)方法が必要です。答えにこれを言及してください。

答え1

以下のようなものを関数に入れて、.emacs好きなキーにバインドできます。

(defun insert-file-name ()
  "Insert the full path file name into the current buffer."
  (interactive)
  (insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))

また見てくださいこの問題、非常に似ているようです。

答え2

少し違う@easyb答えは、キリングパスをバッファに入れる代わりにパスをコピーすることです(読み取り専用ファイルに役立ちます)。

(defun filename ()   
    "Copy the full path of the current buffer."  
    (interactive)  
    (kill-new (buffer-file-name (window-buffer (minibuffer-selected-window)))))

答え3

(kill-new buffer-filename)次のキーにバインドすると十分です。私のキーには次のものがあります~/.emacs.d/init.el

(global-set-key (kbd "C-c w") (lambda () (interactive) (kill-new buffer-file-name)))

現在のファイル名をシャットダウンバッファに入れたいときはいつでもキーを押してから、取り出したい場所ごとにC-c w一般的な方法を使います。C-y

関連情報