開いているファイルの相対パスをコピーするneovimプラグインを作ってLazyVimで使えるようにする
•
4 min read
テストファイルを指定してテストしたいとき、開いているファイルの相対パスを取得する、という操作を頻繁にしていたので neovim でも出来るように自作でプラグインを作ってみた。
プラグインの構成はとてもシンプルで、clip-path.lua に処理を実装している
https://github.com/Ryutaro95/clip-path
.
├── lua
│ └── clip-path.lua
└── README.md
-- clip-path.lua
local M = {}
function M.copy_relative_file_path()
local absolute_file_path = vim.api.nvim_buf_get_name(0)
local git_path = vim.fn.system("git rev-parse --show-toplevel")
local relative_file_path = "/" .. string.sub(absolute_file_path, git_path:len() + 1)
local copy_command = "copied " .. '".' .. relative_file_path .. '"'
vim.fn.system(copy_command)
print(relative_file_path)
print("command:" .. copy_command)
return true
end
return M
処理としては、フルパスを取得して git 管理しているディレクトリからの相対パスをクリップボードにコピーするだけ
普段使いしている LazyVim で使えるように、GitHub にリポジトリを作成して push する
LazyVim で使えるようにインストールする
LazyVim Plugins にあるとおり、プラグインを追加する際はlua/plugins/
配下のファイルにプラグインを追加する設定を記述すればよいので、↓ のようにする
-- lua/plugins/editor.lua
return {
{
"Ryutaro95/clip-path",
keys = {
{
"cp",
function()
require("clip-path").copy_relative_file_path()
end,
},
},
},
-- other plugins ...
}
cp
とすることで、現在開いているファイルの相対パスを取得することができる。もし ;c
とかでコピーしたければ以下のように修正すれば変更できる
keys = {
{
";c",
もし、追加で機能を実装したくなったら、機能ごとのモジュールファイルを clip-path.lua から呼び出して行くことができると思う。
.
├── lua
│ ├─ clip-path -- モジュールを格納するディレクトリ
│ │ └─ module.lua -- モジュールファイル
│ └── clip-path.lua
└── README.md