Prefix Abbreviation
せっかく教えてもらったので、なんというかマダマダvim内部はサッパリなんだけどとりあえず書いてみた。
command! -nargs=+ PrefixAbbrev call PrefixAbbrev(<f-args>) function! PrefixAbbrev(pfx,word,to) exe 'iabbrev <expr> '.a:word.' <SID>PrefixAbbrev("'.a:pfx.'","'.a:word.'","'.a:to.'")' endfunction function! s:PrefixAbbrev(pfx,word,to) let word = a:word " let pos = getpos('.') not needed? " let word_exists = search('\S\s\+'.a:word, 'bW') -- wrong let word_exists = search('\S\_s\+'.a:word.'\%'.col('.').'c', 'bW') let word_at_cur = expand('<cWORD>') if word_exists && word_at_cur == a:pfx let word = a:to endif " call setpos('.',pos) not needed? return word endfunction
よくわかんねぇ、、、。最初 normal "2B"とかしてたら怒られた。副作用系つかうな、とhelpにモロニ書いてあった。posはiabが良きに計らってくれてるのかな?
PrefixAbbrev()のwordは本当は引数で貰わなくてもいいんだけど、なんとなくこうした。
:PrefixAbbrev kana1 is is<space>god<space>of<space>vim.
とかして kana1 is
kana1 is god of vim. tkuro is baka.
おお,,,
目的の using namespace もおkだ。最初 同時に
:PrefixAbbrev kuro is is<space>a<space>fool<space>of<space>everything.
を定義しようとしてハマッタ。 iab的には どちらも "is" のabbrevになってしまうのでダメ。なんかここまでやるなら abにこだわる必要も無いような気もしてきた。
追記:
うっかりsearchに限定line('.')を付け忘れた奴を貼付けてた。ボケまくり。修正。
しかしyen と\が入れ替わってしまうの何とかならないかな。貼付けるとき面倒。
更に追記:
なんか更にボケてた。line('.')つけるとダメ。\_sで行末も含めたら意図通りになった。難しい。
更に更に追記:
やっとなんとかなった。。。かっこわるすぎ。まだ問題あり。カーソルの上の単語の一個前に行きたいだけなんだけど、ダメだなあ自分。Emacsだったらlooking-backって感じがなかなかできない。だめだ、、、僕の今の知識ではこれが限界。とりあえずは上手く動いてるように見える。