"<TAB>で補完 " {{{ Autocompletion using the TAB key " This function determines, wether we are on the start of the line text (then tab indents) or " if we want to try autocompletion function! InsertTabWrapper() let col = col('.') - 1 if !col || getline('.')[col - 1] !~ '\k' return "\<TAB>" else if pumvisible() return "\<C-N>" else return "\<C-N>\<C-P>" end endif endfunction " Remap the tab key to select action with InsertTabWrapper inoremap <tab> <c-r>=InsertTabWrapper()<cr> " }}} Autocompletion using the TAB key
でしばらく使ってたんだけどしっくり来ない。
補完の第一候補が最初から選択されているので、returnキーならそのまま確定するのだけどtabを押すと二個目が選択されちゃって戻ったりしなきゃいけない。
これはストレスなので.vim/bundle/AutoComplPop/autoload/acp.vimの中身を見て、
の部分をこう書き換えたfunction acp#onPopupPost() " to clear <C-r>= expression on command-line echo '' if pumvisible() inoremap <silent> <expr> <C-h> acp#onBs() inoremap <silent> <expr> <BS> acp#onBs() " a command to restore to original text and select the first match return (s:behavsCurrent[s:iBehavs].command =~# "\<C-p>" ? "\<C-n>\<Up>" : "\<C-p>\<Down>")
最後のところは<Up>と<Down>を消すだけでもいいけど、なんとなく消すのが嫌だったのでこうした。function acp#onPopupPost() " to clear <C-r>= expression on command-line echo '' if pumvisible() inoremap <silent> <expr> <C-h> acp#onBs() inoremap <silent> <expr> <BS> acp#onBs() inoremap <expr> <CR> pumvisible() ? "\<C-Y>\<CR>" : "\<CR>" " a command to restore to original text and select the first match return (s:behavsCurrent[s:iBehavs].command =~# "\<C-p>" ? "\<C-n>\<Up>\<C-n>" : "\<C-p>\<Down>\<C-p>")
これで、tabを押したタイミングで第一候補から選択、returnは補完があろうがなかろうが改行になった。
参考:
autocomplpop.vimでリアルタイムにキーワード補完 - ナレッジエース
autocomplpop.vim -自動補完プラグイン- « Labs@doya.in