New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<C-V>$ で作成された矩形に対するオペレータ #565

Closed
syngan opened this Issue May 20, 2014 · 11 comments

Comments

Projects
None yet
3 participants
@syngan

syngan commented May 20, 2014

:h g@CountSpaces() の例がありますが、この方法では一番下の行が一番長い行でない場合に正しくスペースの数をカウントすることができません。これはどうやって実現するのが正解でしょうか

  • ヘルプの内容が不十分だと思います。 <C-V>$ の場合は対応していないとコメントを書くか、対応させるべきだと思います
@h-east

This comment has been minimized.

Member

h-east commented May 24, 2014

確かにあの例だと指摘通りダメですね。

a a
 b b b b
cc
  • :h g@にあるサンプルを.vimrcにコピペしてVim起動
  • 上記のバッファに対して <C-V>G$して<F4>押すと3と表示されてしまう。(正解は5)

gvコマンドを使うようにサンプルを変更するというのはどうでしょうか?

diff -r 54d96e3b2eec runtime/doc/map.txt
--- a/runtime/doc/map.txt   Thu May 22 21:22:19 2014 +0200
+++ b/runtime/doc/map.txt   Sat May 24 12:31:15 2014 +0900
@@ -828,8 +828,8 @@
      let &selection = "inclusive"
      let reg_save = @@

-     if a:0  " Invoked from Visual mode, use '< and '> marks.
-       silent exe "normal! `<" . a:type . "`>y"
+     if a:0  " Invoked from Visual mode, use gv command.
+       silent exe "normal! gvy"
      elseif a:type == 'line'
        silent exe "normal! '[V']y"
      elseif a:type == 'block'
@syngan

This comment has been minimized.

syngan commented May 24, 2014

良くわかっていないのですが, a:type='block' のときには <C-v>$ なものってありえないのでしょうか?
それがないのなら、 gv で良いと思います。

@h-east

This comment has been minimized.

Member

h-east commented May 24, 2014

ノーマルモードで<F4>が押された時に呼ばれるCountSpaces()の引数は1つです。
(:h g@関数の引数には、文字列が一つ渡されます:と記述あります)
ビジュアルモード選択時に<F4>が押された時のみ if a:0が真になります。
(サンプルの vmapCountSpaces()に引数を2つ指定しているため)

ですのでビジュアルモード選択時の挙動はif a:0が真の部分のみ考慮すれば良いということになります。

@syngan

This comment has been minimized.

syngan commented May 24, 2014

はい。ビジュアルモード選択の挙動が if a:0 のところしか通らないことは理解しています。

a:type='block' のときには <C-v>$ なものってありえないのでしょうか?

ビジュアルモード選択以外のときに <C-V>$ で作った矩形はありえないのか?
<C-v>$ の矩形を返すテキストオブジェクトは作れそうな気がしますが、どうなのかなという疑問でした。

と。試してみます。

@syngan

This comment has been minimized.

syngan commented May 24, 2014

:h g@

                       "block" {motion} は矩形 |blockwise-visual|
                    "block" はたまにしか使われません。ビジュアルモードの場
                    合だけ渡されるのですが、"g@" と合わせてもそれほど便利
                    ではないからです。

ん??そもそも a:type=='block' の判定自体がいらない感じですか????

@h-east

This comment has been minimized.

Member

h-east commented May 24, 2014

この件でいろいろ操作していたらビジュアルモードのバグ見つけたのでIssue登録しました。ピャー
#568

@h-east

This comment has been minimized.

Member

h-east commented May 30, 2014

ん??そもそも a:type=='block' の判定自体がいらない感じですか????

たぶんいらないと思います。

上のpatch(#565 (comment)) に
a:type=='block'の条件いらないんじゃね?」と添えて投稿してみます。

@h-east h-east self-assigned this May 30, 2014

@h-east

This comment has been minimized.

Member

h-east commented May 31, 2014

@h-east

This comment has been minimized.

Member

h-east commented Jun 2, 2014

elseif a:type == 'block'のブロック要るん?に対してBramから返信があった。

Right, it can be removed. I wonder if there is an example where "block"
would matter. Perhaps when changing text, e.g. adding a number to all
numbers in the selected area. That's much more complicated though.

後半がよく分かんないだけど何か返した方がいいですか?

@syngan

This comment has been minimized.

syngan commented Jun 2, 2014

vim_dev への報告ありがとうございました。

後半がよく分かんないだけど何か返した方がいいですか?

私も良くわからんですし、放置で構わないです。。

@h-east

This comment has been minimized.

Member

h-east commented Jun 13, 2014

rev.5968:92751673cc37 で取り込まれました。
elseif a:type == 'block'の部分も削除されました。

vim-jp/vim@999af5d#diff-28587d36c24b61c33d4d01601f5974eeL831

@syngan Issue登録ありがとうございました👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment