GithubHelp home page GithubHelp logo

Comments (48)

rhysd avatar rhysd commented on June 14, 2024

operator#user#define() の第3引数でいけそうなので,少し試してみます.
ただ,変更箇所が多いので実装には時間がかかると思います.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

了解です。お願いしますいぬ。
(ただ、結構欲しい機能だったりするので先に自分で簡単なラッパーを書いてしまうかも…。

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

簡単なラッパーを書いてみました。
https://github.com/osyo-manga/vim-operator-surround-before
これは次のように利用できます。

nmap sa <Plug>(operator-surround-append-before-getchar)
nmap s( <Plug>(operator-surround-append-before-getchar)(
nmap s{ <Plug>(operator-surround-append-before-getchar){
nmap s" <Plug>(operator-surround-append-before-getchar)"

ご参考までに。

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

現在実装中ですので,もうしばらくそちらのラッパーでお待ち下さい.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

!?

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

すみません,ブラウザがコメント後遷移せず,反応が無いと勘違いしてクリック連打してしまいました…

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

連打力

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

inu

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

うかさま!

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

うかさま!

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

試しに実装してみようとしましたが,operator#user#define() の第3引数で getchar() を呼んでもマッピングの後の入力を getchar() が食ってしまうのでうまくいかないですね.イヌゥ…

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

かなり汚い実装になりそうですが,別マッピング定義する方向で実装します.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

ちなみにわたしの実装は先に getchar() を処理してから <Plug>(operator-surround-append) を呼び出していますね。

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

s/<Plug>(operator-surround-append)/operator#surround#append/

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

<Plug>(operator-surround-append) に対して,<Plug>(operator-surround-append-2) 的なマッピング用意します.

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

はい,そんな感じでいきます.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

(operator-surround-append-2)

!?

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

input_in_advance ブランチにとりあえず実装してみました.<Plug>(operator-surround-* を上書きしてしまえば良いと気づいたので,余計なマッピングは定義しなくて済みました.operator#surround#input_block_in_advance1 にすると有効になります.
テスト書いて問題が無さそうなら master にマージ予定です.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

ありがとうございます。試してみます。

input_in_advance ブランチにとりあえず実装してみました.(operator-surround-* を上書きしてしまえば良いと気づいたので,余計なマッピングは定義しなくて済みました.

個人的には <Plug>(operator-surround-append-before) みたいなマッピングを増やしてもらっても構わなかったですね(オプションで切り替えるよりは任意のマッピングを選択して使用する方が柔軟性が高いので。

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

こちらでも動作することを確認しました。ありがとうございます。
あと <Plug>(operator-surround-repace) にも対応する事って可能でしょうか。
こちらも先に括弧が入力する事ができれば便利そうです。

個人的には (operator-surround-append-before) みたいなマッピングを増やしてもらっても構わなかったですね(オプションで切り替えるよりは任意のマッピングを選択して使用する方が柔軟性が高いので。

これなのですがやはりオプションで切り替えるよりはマッピングを増やしてしまったほうが柔軟性が高いんじゃないかと思いました。
例えばマッピングごとに対応しておけば『<Plug>(operator-surround-append) は先に入力をしたいけど <Plug>(operator-surround-repace) は後から括弧を入力したい。』みたいな事が可能だと思います。

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

確認ありがとうございます.

あと (operator-surround-repace) にも対応する事って可能でしょうか。

あれ,appendreplace の両方に対応していたつもりだったんですが,できてませんでしたか… 確認してみます.報告ありがとうございます!

例えばマッピングごとに対応しておけば『(operator-surround-append) は先に入力をしたいけど (operator-surround-repace) は後から括弧を入力したい。』みたいな事が可能だと思います。

確かに可能ですが,それをやりたいユースケースが思いつかないです.おしょーさんがそうしたいという要望があるのであれば,実装します.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

あれ,append と replace の両方に対応していたつもりだったんですが,できてませんでしたか… 確認してみます.報告ありがとうございます!

あにゃ、こちらでもう1回試してみましたがやはり <Plug>(operator-surround-replace) の方は後から括弧の入力になりますね。

確かに可能ですが,それをやりたいユースケースが思いつかないです.おしょーさんがそうしたいという要望があるのであれば,実装します.

んー『どうしてもほしい』という要望があるわけではないですが、『そういう要望があった場合に柔軟に対応できるよねー』という感じですかね
どちらかというとオプションで切り替える設計が気持ち悪いというのが強い

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

あれ、今気づいたんですが<Plug>(operator-surround-append)operator#surround#input_block_in_advance の値に関係なく『先にブロックを入力する処理』になりますね。

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

あとはなしは変わるんですが、以下のように『連続して CursorHold を呼び出すハック』を行っている場合、『ブロックの入力待ち』がupdatetimeの間隔でスキップされてしまうようです。

augroup test
    autocmd!
    autocmd CursorHold * call feedkeys(mode() =~# '[iR]' ? "\<C-g>\<ESC>" : "g\<ESC>", 'n')
augroup END

わたしの vim-operator-surround-before だとこの問題は起きないようですね。

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

あーあと『ブロックの入力』を <C-c> でキャンセルした場合、以下の様なエラーメッセージが出力されました。

function operator#surround#wrap の処理中にエラーが検出されました:
行    1:
E706: 変数の型が一致しません: s:input

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

反応遅くてすみません…なかなかまとまった時間取れないので,返信だけですが

あれ、今気づいたんですが(operator-surround-append) は operator#surround#input_block_in_advance の値に関係なく『先にブロックを入力する処理』になりますね。

こちらでは,初回のみ挙動がおかしくなりますね…どうしてだろう.

あとはなしは変わるんですが、以下のように『連続して CursorHold を呼び出すハック』を行っている場合、『ブロックの入力待ち』がupdatetimeの間隔でスキップされてしまうようです。

あー,多分 feedkeys() の入力を getchar() が食っちゃうからですね.おしょーさんのほうのは wrapper コマンドにも feedkeys() を使っているから大丈夫なんだと思います.ちょっと対応してみます.

あーあと『ブロックの入力』を でキャンセルした場合、以下の様なエラーメッセージが出力されました。

こちらでも再現しました.多分すぐに修正できます.

コメントありがとうございます.ちょっと引越し前で時間が取れないので,気長にお待ちください…

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

あとはなしは変わるんですが、以下のように『連続して CursorHold を呼び出すハック』を行っている場合、『ブロックの入力待ち』がupdatetimeの間隔でスキップされてしまうようです。

これについて feedkeys() 使ってみましたが,<SID> マッピングの入力に使われる特殊文字がうまく入らないですね…

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

コメントありがとうございます.ちょっと引越し前で時間が取れないので,気長にお待ちください…

りょーかいです。
新しい犬小屋づくりがんばってください!

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

いくつか試してみて

あれ、今気づいたんですが<Plug>(operator-surround-append) は operator#surround#input_block_in_advance の値に関係なく『先にブロックを入力する処理』になりますね。

あーあと『ブロックの入力』を でキャンセルした場合、以下の様なエラーメッセージが出力されました。

が修正されていることを確認しました。ありがとうございます。
あと <C-c> でキャンセルを行った場合でも textobj の入力待ちが発生するのですがこれは意図的なのでしょうか。
キャンセルしてしまっているのでもうこれも抜けてしまってもよいような気がします。

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

確かに可能ですが,それをやりたいユースケースが思いつかないです.おしょーさんがそうしたいという要望があるのであれば,実装します.

これですが、以下のようにキーマッピングしたい場合に『<Plug>(operator-surround-repace) は後から括弧を入力したい』というケースが出てきました。

" 対象となるブロックは a" や a( ではなくて <Plug>(textobj-multiblock-a) を使用する
" sr( や sr" などでカーソルから一番近い位置のブロックを置換できる
nmap sr <Plug>(operator-surround-replace)<Plug>(textobj-multiblock-a)

master で少し試してみましたがなかなかに便利そうな感じだったので対応されると嬉しい。

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

でキャンセルを行った場合でも textobj の入力待ちが発生するのですがこれは意図的なのでしょうか。

オペレータマッピング側からテキストオブジェクトの入力をキャンセルする方法ってありましたっけ.

これですが、以下のようにキーマッピングしたい場合に『(operator-surround-repace) は後から括弧を入力したい』というケースが出てきました。

なるほど,了解しました.では別マッピングとして提供する方向で修正します.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

なるほど,了解しました.では別マッピングとして提供する方向で修正します.

ありがとうございます。

オペレータマッピング側からテキストオブジェクトの入力をキャンセルする方法ってありましたっけ.

んー処理の流れを理解していませんが call feedkeys("\<ESC>", "n") を呼ぶとか?

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

9298951 で実装してみました.
ちょっとマッピング名が長いですが,

  • <Plug>(operator-surround-append-input-in-advance)
  • <Plug>(operator-surround-replace-input-in-advance)

を normal mode のマッピングとして定義してみました.お時間あるときにでも試してもらえるとありがたいです.

ちなみに,CursorHold でポーリングするハックには対応できていない気がします(未確認)

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

ありがとうございます。

<Plug>(operator-surround-append-input-in-advance)
<Plug>(operator-surround-replace-input-in-advance)

この2つは動作することを確認しました。いい感じです。

ちなみに,CursorHold でポーリングするハックには対応できていない気がします(未確認)

これはまだ再現するようですねぇ。

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

今ふと思ったのですが,getchar() での入力待ち中って CursorHold 発火しましたっけ…?

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

(だいぶ時間が空いてしまった…)
うーん、どうでしょう。わたしは経験したことがないですねぇ。

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

ping

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

pong.

すみません,notification が埋れてしまっていて気付きませんでした.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

これってまだ解決はしていない感じなのでしたっけ。

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

で、思い出したのですが、これが原因だったりするのかな。
vim-jp/issues#607

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

はい,まだ解決していませんでしたが,確かにその issue が原因の可能性ありますね… この issue 用の開発ブランチは input_in_advance として残してあるので,時間あるときに確認してみます.
ありがとうございます.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

ちなみにわたしはこんな感じの workaround で対応してます。
https://github.com/osyo-manga/vital-over/blob/f159f1fdd073b50d42c3d7fad30620fbe08e131f/autoload/vital/__latest__/Over/Input.vim#L16

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

ありがとうございます.確か clever-f.vim のほうでも同じ対応を入れているはずなので,こちらでも試してみます.

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

ping

from vim-operator-surround.

rhysd avatar rhysd commented on June 14, 2024

from vim-operator-surround.

osyo-manga avatar osyo-manga commented on June 14, 2024

from vim-operator-surround.

amerlyq avatar amerlyq commented on June 14, 2024

I could be wrong, but is this discussion about explicitly mapping for certain block symbol?
Maybe, you have solution for how to embed certain block symbol instead of prompt?
I use embedding for fast replacing any nearest block to quotes:

nmap qq <Plug>(operator-surround-replace)<Plug>(textobj-anyblock-a)"

But how to implement something similar for <Plug>(operator-surround-append)?

from vim-operator-surround.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.