^Vの矩形選択のハイライトには未対応
Closed this issue · 10 comments
ちょっとやりかけたメモだけ残しときます。
矩形選択ハイライト自体は以下の様にやればできました。
楽しみにしてます。
let [sl, sc] = [line("'["), col("'[")]
let [el, ec] = [line("']"), col("']")]
echo [sl, sc]
echo [el, ec]
let pat = printf('\v\c%%>%dl%%>%dc.*%%<%dl%%<%dc', sl-1, sc-1, el+1, ec+1)
call matchadd('Visual', pat)
すいません。ちょっと先ほどの発言の趣旨を理解していませんでした。
PRください。
ん、そうですか。なるほど。ちょっとやれるかどうかやってみます。
難しそうだったら断念するかも。。
何度も申し訳ありません。
こちらで実現できました。
https://github.com/LeafCage/yankround.vim/blob/master/autoload/yankround.vim#L10
ここgetregtype() にしないと初回 "xp とかの矩形が charwiseになっちゃいます。
引数空で v:register を見るとLeafCageさんがlingerで言ってましたよね。
それか getregtype(v:register) とした方わかりやすいかも
私の環境で、確認した限りだともうちょっと変更しないとちゃんととれなそうです。
function! Sample(key)
echo v:register
echo getregtype(v:register)
execute 'normal! ' . a:key
endfunction
nnoremap <silent><Plug>(yankround-p-new) :<C-u>call Sample('p')<CR>
nmap p <Plug>(yankround-p-new)
みたいにして、Plugin内の関数で、最初の p するようにしないと、オリジナルの register が取れないです。
今 p:<C-u>call
としてるところを、プラグイン内の関数内で normal! でやる方式に変えて、その normal の前(normal! の後だとオリジナルのレジスタはnormal! 時に使われちゃうので) に、getregtype(v:register) としないとダメでした。ちょっと大きめの変更になるのと、私自身はそれほど困らないので
pull req はしません。
今は、「初回の貼付け時にのリージョンハイライトは、default register( " or * or + depend on 'clipboard option ) が使われる」という状態ですね。
参考まで。
ありがとうございます。
とりあえずgetregtype()で取得するようにしました。
ただ、yankroundが最初のp
を関数の外でやっているのには理由がありまして、そうしないとリピートに対応できないからです。
それを無理に対応させるにはrepeat.vim
を使うなど、外部で色々やらないといけないのです。
あ、今、問題を正しく把握しました。
というか、今まで私はv:registerで取得できるだろうと勘違いしていました。
たしかに、これでは取得できませんね。
解決が難しい問題になりそうです。
リージョンハイライトの正確さよりも、repet 対応の方が大事だと思います。repeat.vim に依存したり、コードが複雑になるのはイヤですもんね。
どうもです。
関数の外でのexecute
コマンドだとリピートが反応することに気付いたので、それを利用して修正しました。
ついでにp
を連続で使用した場合、前のハイライトが削除されずに残ってしまう問題にも対応しました。