Vim - 編集中ファイルのパスをクリップボードに登録する

             

編集中のパスを expand() で展開し、結果をレジスタ経由でクリップボードに登録する方法について。

モチベーション

カレントバッファのパスをコピーしたい

Windows 環境にて gVim を使っていた時にはあまりやる機会がなかったが、 開発環境が MacOS + Terminal(iTerm2) + Vim に移行してから、 カレントバッファのパスをコピーしたい というシチュエーションが増えた気がする。 Google 先生に尋ねればすぐにわかることだが、なかなか記憶に定着しないので簡単な記事にしておくことにする。

前提

Vim 内部だけでなく 外側のアプリケーション に結果を渡したいので クリップボード を経由して渡すことにする。そのため、使っている Vim が +clipboard にてビルドされている必要がある。

ビルド時のオプションを確認:

$ vim --version | grep clipboard
+clipboard         +keymap            +printer           +vertsplit
+emacs_tags        -mouse_gpm         -sun_workshop      -xterm_clipboard

-clipboard となっている場合は 残念ながら クリップボード連携が有効になっていないので、ここら辺 を参考に インストールし直そう。

解決方法

カレントバッファのパスをクリップボードへ登録:

:let @* = expand('%:p')

カレントバッファの親ディレクトリをクリップボードへ登録:

:let @* = expand('%:h')

カレントバッファのファイル名をクリップボードへ登録:

:let @* = expand('%:t')

組込関数 expand について

組込関数 である expand() は、引数が %#< で始まる場合には 続いて指定された変換子との組み合わせで、それぞれに関連付けられた変換を行った結果を返す。

今回使った %現在のバッファのファイル名(カレントディレクトリからの相対) を表し、以下の識別子と組み合わせることができる。

変換子:
	:p		フルパス名を展開
	:h		ヘッド(ディレクトリ)
	:t		テイル(ファイル名だけ)
	:r		拡張子が削除される
	:e		拡張子だけ

ある条件化での %識別子 との組み合わせの展開結果を 例として記載しておく。

条件:

展開結果:

識別子 Exコマンド 結果
- :echo expand(’%') Documents/Work/file.txt
:p :echo expand(’%:p') /Users/micheam/Documents/Work/file.txt
:h :echo expand(’%:h') Documents/Work
:p:h :echo expand(’%:p:h') /Users/micheam/Documents/Work
:t :echo expand(’%:t') file.txt
:r :echo expand(’%:r') Documents/Work/file
:e :echo expand(’%:e') txt

詳細は :h expand() を参照のこと。 vim-jp.org/vimdoc-ja

参考


おわり


  1. Windows な人は Kaoriya さんが配布している Vim を使うのが良いだろう。確か +clipboard でビルドされていたと思うので。 https://www.kaoriya.net/software/vim/ ↩︎

comments powered by Disqus