これなに
- NeoVim専用プラグイン
- サクッとFloatingWindowを表示する
- 現在カーソル位置のすぐ下(または上)にFloatingWindowを作成
- カーソル移動したらウィンドウは即消える
- 引数で渡したテキストをFloatingWindowに載せる
インストール
Plug 'Rasukarusan/vim-popup-message'
呼び出し方
call popup_message#open(<args>)
に表示したいメッセージをいれてあげればOK。
" 'MM'と入力するとメッセージを表示する nnoremap MM :call popup_message#open('Any messages!')<CR>
関数をぶち込んでもOK。
" メッセージを返す関数 function! s:get_message() return 'Any messages!' endfunction nnoremap MM :call popup_message#open(<SID>get_message())<CR>
なんで作ったか
- FloatingWindowはめちゃくちゃ便利だけど作成が面倒
- Pluginとしての構造でVimScriptを作ってみたかった
元々は「:messages
の最後の行だけFloatingWindowで表示する」というものを作っていたが、汎用的なものを求めた結果こうなった。
FloatingWindowはめちゃくちゃ便利だけど作成が面倒
FloatingWindowを作るには下記のような記述が必要になる。
let config = { \'relative': 'editor', \ 'row': row, \ 'col': col, \ 'width': width, \ 'height': height, \ 'anchor': 'NW', \ 'style': 'minimal', \} let buf = nvim_create_buf(v:false, v:true) let win_id = nvim_open_win(buf, v:true, config)
そこまで多くないと思うかもしれないが上記の他に、位置を示すrow
, col
や大きさを示すwidth
, height
を決める必要があって、その計算がなかなか面倒。
現在カーソル位置のすぐ下にパッと出したいだけなのにいちいち計算しないといけないのがきつい。
Pluginとしての構造でVimScriptを作ってみたかった
今まで自作のVimScriptはvimrc
に全部ぶちこんでいたので、Pluginとして作ってみたかった。あとvimrc
に全部書くスタイルだと、共通で使いたい関数がある場合に記述場所を上の方にしないと不便など、面倒な問題がいくつか出てきたため。
Pluginの作り方については下記の記事が大変参考になった。
終わり
カーソル移動やINSERTモードに入ったときに関数を呼ぶ、というのがどうやってやるのかがわかったり、プラグイン固有の変数の値をユーザーが設定できるようにする方法など結構知らなかったことを知れたのでやってよかった。