0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2020-01-05

問題

vimで定型文の補完を行いたい。
プラグインを使え、という指摘も聞こえてきそうだが、簡便に実現する方法を考えてみた。
追記 2020/01/13 Vimで定型文の補完を行う簡易な方法(2) に、改善したスクリプトを紹介しています。

対処

以下を、~/.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関数の使い方)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?