Neovim 上でファイルパスをクリップボードにコピーする
現在開いているファイルのパスが欲しくなるときが意外とあります。クリップボードにコピーして、その次の行動に使えるようにしたいです。
コマンドが覚えにくい
しかしながら、Vim / Neovim でこれを実現するには少々面倒なコマンドが必要なようです。
私が最初に知ったのは stack overflow の こちらの質問 で紹介されている方法でした。
:let @+ = expand("%")このコマンドを実行すると、たしかに期待通りの動きをしてくれます。
@はレジスタを参照する場合の記法で@+はクリップボードレジスタを表すexpand("%")で現在のファイルの相対パスを取得する
..というような仕組みによって、クリップボードレジスタにファイルの相対パスを書き込みます。
copy-file-path.nvim プラグインを作る
やりたいことは実現できたのですが、複雑で覚えられる気がしません。仮に覚えられたとしても入力が面倒なのでコマンド化はしたいところです。
このような背景で、copy-file-path.nvim という小さな Neovim プラグインを作りました。
https://github.com/h3pei/copy-file-path.nvim
使い方は簡単です。 lazy.nvim や vim-plug などお気に入りのプラグインマネージャーでインストールするだけで、以下のコマンドが使えるようになります。
:CopyFilePath: CopyRelativeFilePath のエイリアス:CopyRelativeFilePath: 相対パスをクリップボードにコピー:CopyAbsoluteFilePath: 絶対パスをクリップボードにコピー:CopyRelativeFilePathFromHome:$HOMEからの相対パスをクリップボードにコピー:CopyFileName: ファイル名のみをコピー
コピーすると Copied: .. とコピーした結果を出力するようにしてみました。ちょっと迷ったのですがあったほうが使っていて安心感があるなと感じたためです。
また私の経験上、相対パスを利用したくなるケースが最も多いので、これを最も短いコマンド :CopyFilePath でも実行できるようにしています。
さらに、お好みで以下のようなキーマップを追加するとよいかもしれません。
vim.keymap.set("n", "<Leader>cp", "<Cmd>CopyFilePath<CR>", { noremap = true, silent = true })これで、<Leader>cp と入力するだけでカレントファイルの相対パスをコピーできるようになります。
おわりに
小さなプラグイン copy-file-path.nvim を作った話でした。
もし同じようなニーズを持っている Neovim ユーザの方がいたら、ぜひ使ってみてください。

h3pei
フリーランスのソフトウェアエンジニア。Ruby / Rails アプリケーションの開発が得意領域。設計・実装・運用まで含めてプロダクト開発が好きです。
Questalという目標達成コミュニティサービスを開発しました。仲間と一緒に目標達成に取り組みたい方はぜひご利用ください。
