getregtype('_') が常に 'v' をかえす #965

Closed
machakann opened this Issue Oct 8, 2016 · 6 comments

Projects

None yet

3 participants

@machakann

質問・報告の内容

事前に何をヤンクしたかにかかわらず、ブラックホールレジスタの種類を getregtype() 関数で取得しようとすると常に 'v' がかえります。個人的には空文字列がかえることを期待します。

Vimのバージョン

8.0.19

OSの種類/ディストリ/バージョン

  • Windows 10 Pro 64bit
@rbtnn
rbtnn commented Oct 8, 2016

@machakann さんの再現手順を記載してもらってもいいですか?

@machakann
machakann commented Oct 8, 2016 edited

再現手順

適当なバッファで次のように実行しました。

" characterwise
normal! "_yl
echomsg getregtype('_') " -> 'v'
" linewise
normal! "_yVl
echomsg getregtype('_') " -> 'v'
@rbtnn
rbtnn commented Oct 8, 2016

私もまだちゃんと調べてないのでなぜかはわかりませんが、'%'、'#'、'='、':'、'/'、'.'、Ctrl_F、Ctrl_P、Ctrl_W、Ctrl_A、'_'は常に'v'を返すようになっているみたいです。

https://github.com/vim/vim/blob/master/src/ops.c#L6600
https://github.com/vim/vim/blob/master/src/evalfunc.c#L5006

@machakann

Ctrl_F、Ctrl_P、Ctrl_W、Ctrl_A はたしかによくわからないですけど動きますね、 'v' がかえります。何の機能だろう?

'_' については仕様と思って諦めたほうがいいですかね。まだ使われていない有効なレジスタの種類を取得しようとしても空文字なので、空文字のほうがしっくりくるかと思ったんですが。

@rbtnn
rbtnn commented Oct 8, 2016

どうも、_レジスタは常に空文字列という仕様みたいなので、''はcharacterwiseということで'v'が返るみたいですね。

echo string(@_)
''
@machakann

ありがとうございました。仕様ということで納得しました。

@machakann machakann closed this Oct 9, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment