cohama / lexima.vim

Auto close parentheses and repeat by dot dot dot...
1.01k stars 46 forks source link

<CR>のリマップについて #94

Closed KottoSyu closed 4 years ago

KottoSyu commented 4 years ago

cohamaさん、いつもlexima.vim活用させて頂いております。 ありがとうございます。 質問なんですが、自分の.vimrcで< CR>をmapしましたが、一回insertモードに入ると、< CR>のマップが、 lexima.vimによって、リマップされます。 lexima_newlineのルールのためだと解釈しております。 < CR>のマップをうまく両方適用させる方法はありますでしょうか? <例>
{ < CR>の場合のみ、lexima.vimのマップを適用させる。 それ以外の場合は、自分のマップを適用。

それか、lexima.vimのinsert modeののマップを他のキーマップに変えることは可能ですか? <例> 自分の< CR>のマップを活かしつつ、 { j< CR>でlexima_newlineを実行出来るようにする。

vimmerを目指すvim初心者のため、初歩的な質問ですが、 ご教示頂ければ、幸いです。

cohama commented 4 years ago

ありがとうございます。 インサートモード時の <CR> のマッピングが lexima.vim に取られるのはおっしゃるとおりです。

< CR>のマップをうまく両方適用させる方法はありますでしょうか?

これは <CR> をどういうふうにマッピングしたいかによるのですが、可能な場合があります。 差し替えなければどういうマッピングを実現したいのか、教えてもらえますか?

KottoSyu commented 4 years ago

ご返答ありがとうございます。 単純なことなんですが、 <CR>押すたびに、undoの単位を作りたいのと、画面をzzしたいんです。 「実践vim 思考のスピードで編集しよう」を読んでいて、undoの単位を意識したいと思いました。

今のところ、 inoremap <CR> <CR>x<BS><C-o>zz と考えています。 x<BS>autoindentが消えないようにするためです。 他にいい方法が思いつきませんでした。

inoremap <CR> <CR>x<BS><Esc>zza でも考えていましたが、<Esc>入れてるのに、 undoの単位が作られませんでした。 ドットの動作は更新されていました。 不思議です。

長々とすいません。 周りにvimmerが一人もいなく、 vimの話が出来るのが嬉しいです。

このマップの場合はどうでしょうか? よろしくお願いいたします。

cohama commented 4 years ago

なるほどです。 それであれば lexima.vim の map_hook を使うと良さそうです。ちゃんとドキュメント書いてないんですが、 vimrc に以下を書けば良さそうです。

call lexima#insmode#map_hook('after', "<CR>", "x<BS><C-o>zz")

上記で、<CR> の通常の処理を lexima 側で行ったあとにユーザ定義のマッピングを挟むことができます。

KottoSyu commented 4 years ago

そんな関数があるんですね! 早速やってみます。

大切なお時間でご対応頂きまして、 ありがとうございます。