背景
emacsで文章をコピー(kill ring save)して、別のディレクトリにあるファイルを開いて、さっきの文章をペースト(yank)しようとすると、ディレクトリのパスがクリップボード(kill ring)に保存されていて、パスがペーストされることがあります。度々遭遇して不便に感じていたので、解決方法を調べてみました。
備忘録を兼ねて、分かったことを共有します。
方法1: 過去にコピーした文章をペースト(yank next)する
C-y でペースト(yank)した後に M-y を入力すると、emacsは過去にコピーした文章を表示(yank next)してくれます。これを利用することにより、emacsの設定を変えずとも、ディレクトリのパスがクリップボードにコピーされていても、 M-y を入力すれば期待する文字列をペーストできます。
方法2: C-backspaceとM-Delでコピーされるのを止める
「emacs LocateFiles kill-ring config」というキーワードで検索していた所、下記のページが見つかりました。Emacs で M-backspace で kill-ring に追加したくない
どうやら、ファイルを開く操作でパスがコピーされるのではなく、ファイルのパスをたどる時に使っていた C-backspace コマンドが意図しないパスのペーストを行っていたようです。
M-Del でのコピーを止めるには、上記のページとemacsのwikiで紹介されているとおり、下記の記述を ~/.emacs.d/init.elに追加してemacsを再起動します。
(defun delete-word (arg) "Delete characters forward until encountering the end of a word. With argument, do this that many times." (interactive "p") (if (use-region-p) (delete-region (region-beginning) (region-end)) (delete-region (point) (progn (forward-word arg) (point))))) (defun backward-delete-word (arg) "Delete characters backward until encountering the end of a word. With argument, do this that many times." (interactive "p") (delete-word (- arg))) (global-set-key (read-kbd-macro "<M-DEL>") 'backward-delete-word) (global-set-key (read-kbd-macro "<C-backspace>") 'backward-delete-word)
上記の設定を反映すると、今まで遭遇していた意図しないパスとペーストが発生しなくなりました。
余談: コピーした文章(kill-ring)を一覧で見る
コピーした文章の一覧(kill-ring)を見る機能は、emacsに標準では無いようです。一覧を見るには、helmをインストールして「M-x helm-show-kill-ring」を実行するとか、emacs-goodies-elをインストールしてbrowse-kill-ringを実行するが必要です。
htlm-show-kill-ringを使うと、このようにコピーした文章の一覧を確認できます。
まとめ
ファイルのパスが意図せずコピーされてしまうのは、パスをたどる時に使っていた M-Del コマンドが原因であると分かりました。C-backspaceとM-Del 実行時にコピーしないふるまいをemacsに設定することにより、ディレクトリが異なるファイル間でも滞り無く文章をコピーできるようになりました。
参考
Copy And Paste | Emacs WikiEmacs で M-backspace で kill-ring に追加したくない
Backward Delete Word | Emacs Wiki
初心者〜初級者のためのEmacs-Helm事始め : 前編
Keyboard Macros Tricks | Emacs Wiki
更新履歴
2019/05/27C-backspaceでもコピーが発生していたので、M-DELと同様にコピーせず削除する処理に置き換えました。
0 件のコメント :
コメントを投稿