Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

neocomplcache#smart_close_popup()とsmartinputの機能を両立させる

$
0
0

neocomplcacheの設定例にある…

Vim Script
" <C-h>, <BS>: close popup and delete backword char.inoremap<expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"inoremap<expr><BS> neocomplcache#smart_close_popup()."\<C-h>"

これらのマッピングはなくてもneocomplcacheは動作しますが、補完候補のポップアップが出ているときに<BS><C-h>を押したときにポップアップを確実に消してくれるもので、候補の誤爆を防いだり、表示がスッキリしたりする効用があります。

ところが、この設定を使うと、smartinputの以下のような機能が使えなくなってしまいますorz

_ をカーソルと仮定して、<BS>を使う前と後

Before: hoge(_)    After: hoge_
Before: hoge()_    After: hoge_

括弧のペアを削除する機能です。まあ、ペアの括弧が入力されるだけでもかなり便利なんだけど、これはもったいない。

smartinputのローカルな関数を呼び出すために、スクリプト番号をどうやって取ろうとかなり悩んだのですが、ソースをよくよくみたらsmartinput#sid()という関数があるじゃん。一難去った。しかし、どうやっても、マッピングの内容がそのまま文字列として入力されるな… そして、helpを見てみると、関数eval()というのがある。これだ!eval()で囲ってみる。よし。できあがったものを.で結合して完成。

Vim Script
inoremap<expr><C-h>
      \ neocomplcache#smart_close_popup()
      \ . eval(smartinput#sid().'_trigger_or_fallback("\<BS>", "\<C-h>")')inoremap<expr><BS>
      \ neocomplcache#smart_close_popup()
      \ . eval(smartinput#sid().'_trigger_or_fallback("\<BS>", "\<BS>")')

2013-05-23 <CR>の分を追加しておきます。

Vim Script
inoremap<expr><CR>
      \ neocomplcache#smart_close_popup()
      \ . eval(smartinput#sid().'_trigger_or_fallback("\<Enter>", "\<Enter>")')

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>