LoginSignup
0
0

More than 1 year has passed since last update.

ddu.vimでvim-choosewinを使いたかった

Posted at

はじめに

経緯 (よみもの)

いわゆる ShougoWare のなるべく新しいものを追っている…つもりでありましたが、いつの間にか ddc.vimddu.vim などの Denops.vim に依存先を変更したプラグインがリリースされていました
ようやく切り替えたのは確か2021年の秋ごろですが、windowsとmacOSを行ったり来たりすることが多い私にとっては python のパスを切り替えて :healthcheck のステータスを確認して…という作業がPCが交換されるたびに発生しており、それが非常に煩雑に感じていた為、この切り替えは非常にありがたかったのです

ですが…

どうして Defx.nvim ではサポートされていた vim-choosewin が使えなくなっているのですか?

知らんよって言われそうなのですが、その辺のことはShougoさんの記述記事に記載されているように思います

にわかものの私にとっては、歴史のところですでに読み物として面白いと感じておりますが、下記リンクの通り、プラグインそのものに拡張性を持たせるというのが ddc.vimddu.vim の設計思想の根幹にあるように思います

でも選んだファイル(item)を任意のウィンドウに開きたいねん!!

しかし、おそらく3年以上ほど Defx.nvim + vim-choosewin でのファイル操作に慣れ親しんだ私にとって、このあたりの修正はインパクトが大きかったです

なにより頭の中で 「source …? sourceOption …? source.parameter …? filterParams …? なにがなにでどれがどれ…? 😵‍💫😵‍💫😵‍💫」となってしまい、まともに設定を触ることができていませんでした

ただ、最近になってようやくヘルプページから以下の文言を見つけることができ、ここから解決ができました

動作確認環境

  • OS: Windows 11 Pro
    • バージョン 10.0.22621 ビルド 22621
  • Neovim: v0.8.2
PS C:\Users\cocoa> nvim --version
NVIM v0.8.2
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compiled by runneradmin@fv-az28-353

Features: -acl +iconv +tui
See ":help feature-compile"

      システム vimrc: "$VIM\sysinit.vim"
       省略時の $VIM: "C:/Program Files (x86)/nvim/share/nvim"

Run :checkhealth for more info

解決方法

設定ファイルにて、以下の通りに関数を定義し、それを ddu#ui#<filer|ff>#do_action('itemAction') で呼んであげるようにするといい感じに vim-choosewin のあとにファイルを開くことができます

my__ddu_func.vim
function! s:win_all()
  return range(1, winnr('$'))
endfunction

function! MyDduChooseWin(args) abort
  let l:path = a:args.items[0].action.path
  call choosewin#start(s:win_all(), {'auto_choose': v:true, 'hook_enable': v:false})
  execute 'edit ' . l:path
endfunction

call ddu#custom#action('kind', 'file', 'mychoosewin', { args -> MyDduChooseWin(args) })
my__ddu_ui_ff.vim
  nnoremap <buffer><silent> -
        \ <Cmd>call ddu#ui#ff#do_action(
        \     'itemAction', #{ name: 'mychoosewin', quit: v:true }
        \ )<CR>
my__ddu_ui_filer.vim
  nnoremap <buffer><silent> -
        \ <Cmd>call ddu#ui#ff#do_action(
        \     'itemAction', #{ name: 'mychoosewin', quit: v:true }
        \ )<CR>

ddu#custom#action() について

こちらもヘルプに記載がありますが、 ddu.vim に接続されているあらゆるソースタイプとソースを対象に、任意の名前で itemAction からコールする関数を定義できるようです

そのほか貼っていなかった参考…?

おわりに

ddu-source-custom-list あたりもそうですが、独自拡張が書きやすいのは非常にありがたいですね
なお使いこなせるとは言えないのがつらいところです、かなしみ

おわり

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0