-
Notifications
You must be signed in to change notification settings - Fork 47
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
repeat.vim support #18
Comments
+1 |
wktk |
repeat.vimのAPIは触った事ないんですよねぇ。 wktk — |
+1
リピートしたい処理の最後でsilent! call repeat#set("(リピートしたい処理のマッピング)", 1)するだけで良いはずです... |
PR! PR! |
#59 で実装しました (masterにもマージ済みです)。 |
Lingrの方でコメントしてしまいましたが、範囲指定を含めてrepeatするにはこれだけじゃダメでした。
こんな対応で良いかなと思ったけどさすがにダメでした。んー。 |
例えば let lines = line("']") - line("'[")
let prefix = lines ? printf('V%dj', lines) : ''
let lastmap = prefix
\ . printf("\<Plug>(caw:%s:%s)", a:action, a:method)
call repeat#set(lastmap) とりあえず、これで動く気がする。あれ?バッファ開いた直後って行頭と行末にmark([, ])が記憶されてるのかな?バッファ開いた直後だと誤爆する。 と思ったら最初の |
ビジュアルモード確認してませんでした…ありがとうございます。 |
↑ですが繰り返し回数指定のcountだったような気がします。確認しますね。 https://github.com/kana/vim-repeat/blob/master/autoload/repeat.vim
|
ちなみに上記はoperatorとして使ってる分には問題無いです。自分はほとんどoperatorの方しか使ってないので実質問題にはならなそう。 |
あ、operator の方は最初から手を入れてません。 |
結果から言うと手を入れたつもりがなくても入ってしまってる状況だと思います。論拠は以下です。
operator-userの中身は読んでないのではっきりしたことは言えないのですが、やってることは そこでやってるのはmotionやtext-objects指定時に設定されるmark([, ])の範囲をvisualないしlinewise-visualで選択してから指定した関数を呼び出す、みたいな具合です。
間違ってたらすみません。 |
以下でも set encoding=utf-8
" filetype関連のファイルはruntimepathの登録が終わってから読み込むため, 一旦オフ
filetype plugin indent off
" 実は必要のないset nocompatible
" http://rbtnn.hateblo.jp/entry/2014/11/30/174749
if has('vim_starting')
if &compatible | setglobal nocompatible | endif
setglobal runtimepath+=~/.vim/bundle/neobundle.vim_673be4e
endif
call neobundle#begin(expand('~/.vim/bundle'))
NeoBundleLazy 'kana/vim-operator-user'
NeoBundleLazy 'toshi32tony3/caw.vim', {
\ 'depends' : ['kana/vim-operator-user'],
\ 'on_map' : [['nx', '<Plug>', '<Plug>(operator']],
\ }
call neobundle#end()
" filetype関連のファイルを読み込む
filetype plugin indent on
" シンタックスハイライトを有効化(on:現在の設定を破棄する, enable:破棄しない)
syntax enable
" コメントアウト/コメントアウト解除(caw.vim) {{{
if neobundle#tap('caw.vim')
map gc <Plug>(caw:prefix)
map <A-c> <Plug>(operator-caw-wrap-toggle)
endif "}}} |
setline()やsubstitute()あたりを使ってると変更履歴mark([, ])が更新されないので、これが原因ぽいです。
|
変更位置のマークが更新されないのは オペレータを使った場合は対象範囲をオペレータに渡すため Vim がこれらのマークを更新しますが、オペレータ以外のマッピングだと更新されないと思います。 |
かぶってしまいました、すいません。 |
いえいえ、ちょうど同じ結論に達していました。ありがとうございます。マークの更新を見て処理分岐させるしかないですかね |
それと、オペレータが |
変更の開始行と終了行をそれぞれ保持してるみたいなので、そっち使えば解決できる話でした。とりあえず試してみます。
確かにそうですね。operatorに登録するマッピングは分けた方がよさそう |
大変な話になるかもしれないので聞き流してもらって構わないんですが、基本のキーマッピングをオペレータを使って定義することで omap <SID>line :normal! v^og_<CR>
nmap gci <Plug>(operator-caw-hatpos-comment)<SID>line
xmap gci <Plug>(operator-caw-hatpos-comment)
|
あー・・・なるほど。
これはどういうことですかね。operator-userで定義したマッピングはvisual-repeatできるので変わらないような。operator-userに依存しないで実現するのが簡単なら、そもそも依存しなくていいじゃんという話にはなりそう。 |
operator-user がないと caw.vim が使えなくなってしまうということが言いたかったのでした。言葉足らずでした。 |
なるほど。当たり前ですが、そうですね…。caw.vimではなくvim-operator-○○の類になってしまう。 |
覚えている限りでは operator-user がやっているのはマッピングの定義とカウント・レジスタをよしなに扱うことだったので、依存を切るのは難しくないと思います。ただ、それでも全体の作業は大変だと思います。 |
お二人が内部に関する事まで色々議論して頂いてるのを感無量の思いで見ていました。ありがとうございます。 |
.
でコメントアウト操作を繰り返したいです。The text was updated successfully, but these errors were encountered: