Emacsのコピペの主役kill-ringを活用する
Emacsを使い始めて最初に覚えることのひとつにkillとyankがあります。
killが、いわゆる切り取り。yankが貼り付け。かなり高機能な仕組みなんですが、単純な機能の組み合わせで結構つかえるので、まだまだ知らないことが多そうです。今回はいろいろ便利そうな機能を紹介します。
意外と覚えていないショートカット。
EmacsのInfoを見ただけでもこんなにあります。C-k,M-w,C-wぐらいしか使っていないかも。
-‘C-k’カーソルの位置から末尾までkill
- 'M-w’選択範囲をコピー
-‘C-S-backspace’ 一行まるまるkill -‘C-w’選択範囲をkill -‘M-d’次の単語をkill -‘M-<DEL>’前の単語をkill -‘C-x <DEL>’カーソル位置からセンテンスの先頭までをkill -‘M-k’カーソル位置からセンテンスの末尾までをkill -‘C-M-k’括弧の中にカーソルがある場合に中身だけkill -‘M-z CHAR’指定した文字までkill
kill-ringは'M-y'が命
切り取った内容は、kill-ringという変数に履歴として保存されていきます。
'C-y' で普通に貼り付けです。
もし過去に切り取った内容を貼り付けたい場合は、'C-y'に続けて'M-y'を押す毎にひとつ前の内容が貼り付けられます。
これをうまく利用すれば、あるテキストから別のテキストに3箇所コピペしたい場合、交互に1件ごとコピー&ペーストしなくても、一度に3回コピーして、3回ペーストすればいいのです。
こんなのは当然??僕は'M-y'を普段使っているくせに、こういうケースでは普通に1件ごとにコピぺしてしていたのでした。
kill-ringの中身を保存する
通常、kill-ringはEmacsを再起動すると消えてしまいます。
標準のdesktopパッケージを使うと、現在のkill-ringの内容を保存して、起動時に復元されます。 (ただしfaceなどの情報は消えるようですが。)
カスタマイズ変数 desktop-save-mode
を ONにして、 カスタマイズ変数 desktop-globals-to-save
に kill-ring
を追加します。
Emacs終了時に、保存先のディレクトリを聞かれるので指定すればOKです。
kill-ringの中身を確認する。
普通に変数 kill-ring
のevalすればいいだけなのですが、textプロパティの情報が含まれた生のデータなので若干見にくい。
そういう場合は、 browse-kill-ring
というパッケージをkill-ringの閲覧や再利用が楽になります。
インストールは M-x package-install
で browse-kill-ring
を指定すればOK。
ダウンロード先が MELPA になるので、詳しくは Emacsのパッケージ管理を使う を参考にしてください。
kill-ringの履歴の数
標準ではkill-ringに最新の60個まで保存されていますが、カスタマイズ変数 kill-ring-max
で変更できます。
OSのクリップボードもkill-ringへ保存する
GUI版のEmacsを使っている場合、 Emacsでkillした内容は、通常、OS側のクリップボードにも反映されるはずです。これはこれで便利な挙動なんですが、OS側のクリップボードを誤って上書きしてしまうこともあります。
これを防ぐには、カスタマイズ変数 save-interprogram-paste-before-kill
を ON にしておくと、Emacsでkillをする際に、クリップボードのテキストがkill-ringに保存されるようになります。クリップボードの内容がテキストでない場合は、結局消えてしまうようですが、まあ保険代わりにどうでしょう。