line 1 line 2 line 3
line1とline3だけコピーしたいようなケース。
このような隣接していない行のコピーを実現するプラグインを作った。
Neovim限定
デモ
飛ばし飛ばしに行を選択してコピー
選択した後deleteもできる
インストール
好きなプラグインマネージャーでインストール可能
[[plugins]] repo = 'Rasukarusan/nvim-select-multi-line'
設定
プラグインをインストールするとsml#mode_on()
という関数が使えるようになるので、init.vimにmappingを追加する。
" SPACE + v でセレクトモードを開始 nnoremap <Space>v :call sml#mode_on()<CR>
使い方
ノーマルモードでSPACE + vでセレクトモード開始。
vで1行ずつ選択、Vで複数行選択(普段のvimのVと同じ動き)。
yankした後に選択した文字列を出力したくなければ、g:sml#echo_yank_str
を0にセットすればいい。デフォルトは1。init.vimに下記を記載。
let g:sml#echo_yank_str = 0
実装
どうもvimには特定の行だけハイライトするという機能がないみたいなので、FloatingWindowを使ってあたかも選択しているかのように見せている。
ただ1行ごとにFloatingWindowを作っているため、行を選択するごとに動作がもっさりしてしまう。たぶん複数行選択のところは1枚のFloatingWindowにするとかでパフォーマンスあげられるきがする。
あとスクロールすると位置がズレるのも悲しい。
終わり
プラグインとしての完成度は未熟だけど、自分的には満たせてるから、公開した。
細々と修正していきたい。