zoxideとVim/Neovimの連携
#zoxide #Vim #Neovim
zoxide関連のプラグインについて
zoxide.vim
Vim/Neovimの両方をサポート
:Zコマンドでディレクトリ移動ができる
:Ziコマンドで対話的にディレクトリ移動ができる
Vimではfzf.vim, Neovimではvim.ui.selectが使用される模様
DirChangedが発生した際にzoxide addを実行してくれる
telescope-zoxide
telescope.nvimの拡張
zoxide.vimとは異なり、Neovim内でディレクトリを移動した際にzoxide addを実行したい場合はinit.luaなどで自前で設定が必要 (詳しくはChange to directory not listed in zoxide #21)
セットアップ
Neovim向けにtelescope-zoxideのセットアップとディレクトリ移動時にzoxide addを実行するよう設定してみます
lazy.nvimでの設定例
code:init.lua
-- ...
{
'nvim-telescope/telescope.nvim',
dependencies = {
'nvim-lua/plenary.nvim',
},
lazy = true,
cmd = 'Telescope',
config = function()
-- ...
end,
},
{
'jvgrootveld/telescope-zoxide',
lazy = true,
dependencies = { 'nvim-telescope/telescope.nvim' },
config = function()
require('telescope').load_extension('zoxide')
end
},
{
'nvim-lua/plenary.nvim'
}
-- ...
Ziコマンドで対話的にディレクトリを移動できるようにします
code:init.lua
vim.api.nvim_create_user_command(
'Zi',
'Telescope zoxide list',
{}
)
Change to directory not listed in zoxide #21を参考に、ディレクトリ移動時にzoxide addを実行するよう設定します
code:init.lua
local checked_zoxide = false
vim.api.nvim_create_autocmd('DirChanged', {
group = vim.api.nvim_create_augroup('zoxide', { clear = true }),
callback = function(event)
-- Run zoxide add on DirChanged.
local cmd = 'zoxide'
if not checked_zoxide and vim.fn.executable(cmd) == 0 then
vim.api.nvim_del_autocmd(event.id)
return
end
checked_zoxide = true
vim.system({ cmd, "add", event.file }, {}, function(out)
if out.code ~= 0 then
error(out.stderr)
end
end)
end
})