osyo-manga / vital-over

18 stars 3 forks source link

c_CTRL-\_eが実装されてない #89

Open haya14busa opened 10 years ago

haya14busa commented 10 years ago

<CR>= とほぼ同じでコマンドライン全体を書き換えればよいだけっぽいです. プルリクするかもしれませんがそもそもどこのモジュールに実装するべきですかねー...

osyo-manga commented 10 years ago

こういうの1つ1つモジュールで実装しているとモジュールの量が大変なことになるので1度整理したいですね。 (その前にすべてのキーマッピングを実装するのであれば1度洗い出ししたいところ。

haya14busa commented 10 years ago

(その前にすべてのキーマッピングを実装するのであれば1度洗い出ししたいところ。

確かに.

c_CTRL-_ とか c_C-y とか無理そげだったりそこまでするほどのことじゃないやつもある(主観)ので全部実装するひつようはないかなーと思います. という認識でいうと残りの実装すべきっぽいマッピングを洗い出すべきっぽいですかね.

c_Ctrl-\e はあったほうがよさそう(これも主観)かつ<C-r>=を考えれば実装できるっぽいし使用するユースケースもあると思ったので割と考えずにイシュー開いちゃいました

osyo-manga commented 10 years ago

とりあえず、一旦全部のキーマッピングの一覧を作成して、そこから実装するかしないかや優先順位を決めていた方がよさそうですね。

haya14busa commented 10 years ago

とりあえずで作ってみました #90

osyo-manga commented 10 years ago

72 も Fix したので試しにマッピングで解決できないかやってみました。

let s:V= vital#of("vital")
let s:cmdline = s:V.import("Over.Commandline")

let s:my = s:cmdline.make_standard()
call s:my.cnoremap("\<C-\>e", {
\   "key" : "'\<C-e>\<C-u>' . eval(input('='))",
\   "expr" : 1,
\})

call s:my.start()

とりあえず、細かいところは置いておいて動作はします。 以下問題点、。

問題点

" この場合、<A-c> 時にコマンドラインを 3 で置き換えて欲しいが、1+2 という入力を <C-\>e で受け取ることができない
call s:my.cmap("\<A-c>", "\<C-\>e1+2\<CR>")

1番目は Vim 自体の仕様なので対処手段はなさそう。 やるとすれば Vim の input() をつかわないで vital-over でオレオレ input() を作る必要がある。 2番目はキーマッピングではなくて と同様の手順で処理するようにすれば対処は可能。 ただ、キーマッピング中に input() を使用しているキーマッピングを再マップしたい場合に結局問題になるので根本的な解決にはならない。 これも vital-over 側で専用の input() を用意してアレする必要がある。 3、4番目はキーマッピングの設定に待ち時間や待ち文字なんかを指定できるようにすれば対応するのはそこまで難しくはなさそう。 ただ、複数のキーマッピングの待ちがあった場合にどうするのかという問題はある。

haya14busa commented 10 years ago

んー, やっぱり無理やりキーマッピングとして実装するより<C-r>=と同様の方法で対処したほうがいいかなーと思いました。というか何でキーマップで出来ると嬉しいんでしたっけ? 手軽感はあるけどその他のメリットがイマイチ把握してないデス

haya14busa commented 10 years ago

ただ、キーマッピング中に input() を使用しているキーマッピングを再マップしたい場合に結局問題になるので根本的な解決にはならない。

全部 <C-r>=形式にして キースタックがあればそれを使って, なければ input()を使うとか...?

osyo-manga commented 10 years ago

というか何でキーマップで出来ると嬉しいんでしたっけ?

実装がシンプルになればそれだけ拡張性や保守がやりやすくなるのがメリットだと思っています。 現状、= の実装もだいぶコードがあれな感じですし。 あと『無理やり実装する』というよりかは『できればそうしたい』という感じです。 上で上げたのは『とりあえずやってみた』だけなので、件の課題がクリアできないのであればまた手段を変えると思います。

全部 =形式にして キースタックがあればそれを使って, なければ input()を使うとか...?

現状の <C-r>= はそういう風に処理していますね。

haya14busa commented 9 years ago

微妙にこのissueに書くのは適切ジャナイ感もありますが getcmdline()getcmdtype() 対応の eval() を考えてみました(かなり無理やりですが)ので一応貼っておきます

https://gist.github.com/haya14busa/095db3036d6553c4a591

<expr> マッピング, <C-r>=, <C-\>e の対応にて使うとベンリできるという可能性があるしれないです