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

Vimで定型文の補完を行う簡易な方法

$
0
0

問題

vimで定型文の補完を行いたい。
プラグインを使え、という指摘も聞こえてきそうだが、簡便に実現する方法を考えてみた。

対処

以下を、~/.vimrcに追加する。

function! s:CompleteFrom(files)
  let lines = []
  for f in a:files
    let inputfile = expand(f)
    for line in readfile(inputfile)
      call add(lines, line)
    endfor
  endfor
  call complete(col('.'), lines)
  return ''
endfunction

inoremap <F10><C-R>=<SID>CompleteFrom(["$HOME/mydict.txt"])<CR><C-P>
nnoremap <F10> i<C-R>=<SID>CompleteFrom(["$HOME/mydict.txt"])<CR><C-P>
inoremap <F11><C-R>=<SID>CompleteFrom(["$HOME/mydict2.txt", "$HOME/mydict3.txt"])<CR><C-P>
nnoremap <F11> i<C-R>=<SID>CompleteFrom(["$HOME/mydict2.txt", "$HOME/mydict3.txt"])<CR><C-P>

上記で示すvimscriptは、次の仕様になる。

  • 利用方法

    • テキストファイルに、補完候補として表示したい文字列を保存する。
      • 例として、以下のようにしている。
        1つ目のテキストファイルを$HOME/mydict.txtとして、適当に定型文を保存
        2つ目のテキストファイルを$HOME/mydict2.txtとして、適当に定型文を保存
        3つ目のテキストファイルを$HOME/mydict3.txtとして、適当に定型文を保存
      • なお、完全な空行(長さ0の文字列)は候補としては無視される。(vimの候補表示機能の仕様)
    • キーマッピングを定義し、候補リストを表示する。
      • F10キーで、$HOME/mydict.txtの定型文を補完候補としてリストする
        INSERTモードでF10を押下すると、補完候補をリストする。
        NORMALモードでF10を押下すると、INSERTモードに移行して、補完候補をリストする。
      • F11キーで、$HOME/mydict2.txt$HOME/mydict3.txtの定型文を補完候補としてリストする
        INSERTモードでF11を押下すると、補完候補をリストする。
        NORMALモードでF11を押下すると、INSERTモードに移行して、補完候補をリストする。
      • 最後に<C-p>を付けると、ポップアップメニュー表示直後に、候補選択されない状態(バッファは変更されていない状態)となる。こうしておくことで、候補表示直後にESCキーでキャンセルしても、バッファに影響がない。
      • 最後に<C-p>をつけない場合は、ポップアップメニュー表示直後に、一番上の候補が選択された状態(バッファも変更された状態)となってしまう。
    • vimデフォルトのキー定義で操作する。
      • <CR>(エンターキー)で「現在の選択した候補を挿入する」
      • <C-E>でキャンセルする。(バッファをもとに戻す)
      • <ESC>(ESCキー)でキャンセルする。(バッファをもとに戻さない)
      • <C-N><C-P>で「次・前の補完候補」(バッファを変更する)
      • (邪道かもしれないが)上・下キー(カーソルキー)で「上・下の候補を選択」(バッファを変更しない)
      • (邪道かもしれないが)左・右キー(カーソルキー)で候補ポップアップメニューを消す(カーソルを移動する)
  • 補足

    • vimの候補表示機能の仕様として、候補を表示している状況で文字列を入力すると、候補が自動的に絞り込まれる。よって、定型文でよいなら、候補を表示してから入力し、選択するのが得策。
    • vimのcomplete()関数で、候補の表示をカスタマイズできる。
      参考URL vimで独自の補完を設定する(complete関数の使い方)

Viewing all articles
Browse latest Browse all 5608

Trending Articles



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