私がVimについて見逃している主な機能の1つは、現在のファイルのファイル名を常に_%
_バッファーに保存することです( 詳細 )。これにより、次のようなコマンドを簡単に起動できます。
_;; 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、それが違いを生む場合)の下で同様の機能を持ちたい、つまり、現在のバッファーで開かれているファイルの名前を挿入する簡単な方法を持っています。
やりたいことの例
ここでは、このようなショートカットの必要性を感じたときに説明するために、いくつかの基本的な使用例について説明します
コンパイル:_M-x compile
_と入力すると、emacsはコンパイルコマンドを要求します。簡単にgcc (current-buffer)
に入りたい。
ロードファイル:.emacsファイルを編集しているときに、すぐにロードして変更をテストしたいと思います。私が行う方法は_M-x load-file
_であり、常に名前を綴ります .emacs。ショートカットが欲しいのですが。
外部プロセスの起動:_du -sh
_を使用してシェルコマンドを実行したときにショートカットも使用できるようにすることを示すために、例として_M-!
_を指定しました
これまでに見つけたもの
[〜#〜] edit [〜#〜]:A私はこれらのソリューションが機能しない理由を見つけたので、少し無関係です。 IDOを有効または無効にします。
(current-buffer)
_関数 マニュアルで説明 は、現在のバッファー内のファイルの名前を返しますが、上記の例のどこにも、elispコードを評価していません。この関数の評価結果を(ミニ)バッファーに挿入し、この方法をショートカットにバインドする方法はありますか?私がこのように考えるのは間違っていますか?
私は現在、Vimを何年も使用した後、emacs(実際には数か月前)の使用方法を学んでいます。予測可能なusing-emacs-in-a-Vim-wayトラップを回避したい。私が求めているのはemacs-yではなく、より良い(よりクリーンな)方法があるはずだと感じた場合は、答えます。
次のような関数を.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)))))
この質問 も参照してください。似ているようです。
@ easyb's の答えのわずかな変形は、パスをバッファーに配置する代わりにキルリングにコピーすることです(読み取り専用ファイルに便利です):
(defun filename ()
"Copy the full path of the current buffer."
(interactive)
(kill-new (buffer-file-name (window-buffer (minibuffer-selected-window)))))