vimでJava言語用のポップアップ表示を設定する。


まずはじめに、、、私は派遣社員だ。
そのため、派遣先への面接時に、営業が同席する。
その営業が私の意見を無視して勝手に話を進めるため、あれよあれよでその派遣先が決まることがある。
派遣社員になった以上、人間を捨てているが、ちょっと勘弁して欲しい。

と言うことで、次はJava言語案件になるかもしれない。
と言うことは、Java言語を勉強し直す必要が出てきた。
しかし、Java言語関係の本は、使わないと思い、実家に置いたままだ。
仕方ないため、初学本から買い増しすることにした。
何冊何種類の初学本を買えば済むのか・・・できればKindle本を買うつもりなのだが、見にくいため、どうしても紙の本になる。
何か良い対策はないだろう。

※表題は"Java言語用"としているが、あまりJavaに関係ない。

本題

初学向けのプログラミングであれば、仰々しいIDEは絶対にいらない。
そんな環境構築をする暇があるならば、少しでも勉強する時間に充てたい。
如何せん。
Vimを使いこなせないため、未だにIDE並の構築が出来ていないままだった。
これを機に、Language Server Protocol(略:LSP)を導入しようと思う。

LSPとは。

入力途中を自動補完などで完結してくれる機能のことだと思う。
そう思って導入することを決めた。

難しいことはしたくない

IDE環境を用意するのはめんどくさいので、既にインストール済みのVimにちょこっと手を加えるだけで環境構築したいと思っている。
そのため、難しいことや時間が掛かることはしたくない。
と言うことで、上記mattn氏の導入コストを下げるプラグインを使うことにした。

実際のLSP導入

簡単にできるとのことなので、mattn氏の説明通りに進めることにした。

前提

プラグイン管理は、minpacを使っている。

プラグイン導入

1行で済むのか、2行必要なのか、、、とりあえず、簡単に導入できると思っていた。

vimrc
call minpac#add('prabirshrestha/vim-lsp')
call minpac#add('mattn/vim-lsp-settings')

んで、exコマンドライン上で、

コマンド
call minpac#update()

を打ち込む。
そうすることで、プラグインが導入される。
これだけですごく便利になっている。

設定ファイルの書き換え

vimrcへの書き込みも必要だ。

vimrc
" ファイルの変更に伴いリアルタイムにエラー表示する機能 
let g:lsp_diagnostics_enabled = 1
let g:lsp_diagnostics_echo_cursor = 1

" 自動で入力補完ポップアップを表示する設定
let g:asyncomplete_auto_popup = 1
let g:asyncomplete_auto_completeopt = 1

" ポップアップを表示するまでのディレイ
let g:asyncomplete_popup_delay = 200

" LSP の仕様である textEdit を有効にする設定
let g:lsp_text_edit_enabled = 1

let g:lsp_signs_enabled = 1
let g:lsp_diagnostics_echo_cursor = 1

mattnさんは、設定ファイルを分割しているようだが、私はしていない。
そのため、vimrcに書き込んでいるのだが、問題ないと思っている。

母艦も大事

vim-lspが母艦になるようで、これを入れなければ、エラーになる。

エラー
Error detected while processing User Autocommands for "lsp_setup":
E117: Unknown function: lsp#register_server

エラーは避けたい

母艦のプラグインを導入せずに作業を進めたことで、エラーになってしまった。

エラー
BufRead Autocommands for "*.java"..FileType Autocommands for "java"..function <SNR>8_vim_lsp_load_or_suggest[105]..
User Autocommands for "lsp_setup" の処理中にエラーが検出されました:
E117: 未知の関数です: lsp#register_server

きちんと説明は読むようにしよう。

他にも

プラグイン管理用のプラグインにエラーが発生してしまったが、これは既に修正済みのようだ。

Javaファイルを開く

拡張子が*.javaになっているファイルを開く。
そして、

Exコマンド
LspInstallServer

プログラミングファイルに応じたファイルがインストールされる仕組みになっているため、Yesを押下することで、インストール完了まで待てば良い。

完了した。

個人的に文字コードがおかしい・・・が、それは別の機会に見直そう。
UTF-8にしたはずだが・・・。

C++言語には未対応

よく分からないが、導入できないプログラミングファイルもあるようだ。

拡張子.cpp

C++言語ファイルを開く

導入を進められるため、素直に従った。

当然Yesだ。

しかし、インストールに失敗した。
これは、必要なコマンドが見つからなかったかららしい。
そのため、私の環境に問題があるのかもしれないが、今はJava環境さえ整えれば良いため、先送り。

実際の恩恵にあずかれず。

おかしい。
自動補完が一切動かない。

Popupが全く表示されない。

おかしい。

mattnさんの設定には、

vimrc
if empty(globpath(&rtp, 'autoload/lsp.vim'))
 ・
 ・
 ・

function! s:on_lsp_buffer_enabled() abort
 ・
 ・
 ・

augroup lsp_install
 ・
 ・
 ・

が書いてあったが、これいるの?
これを記述することで、設定ファイルが崩されてしまったのだが・・・。

解決(ポップアップ表示)

別途プラグインが必要だった。

asyncomplete.vim

説明が英語なので、必要なプラグインとは思わなかった。

vimrc
"   オートコンプリートポップアップメニュー表示
call minpac#add('prabirshrestha/asyncomplete.vim')
"   オートコンプリートソース
call minpac#add('prabirshrestha/asyncomplete-lsp.vim')

この2種類が必要なようだ。

意図していないポップアップ表示がなされ、ちょっと不快だ。
今回の例で言えば、"System"を入力したいのだが、 S を入力した時点で、"Saf〜ナンチャラ"が自動入力される。
無茶苦茶不便。
やりたいことは、"S"入力時点で、何も入力されず、候補をポップアップ表示して欲しい。
困る。

asyncomplete.vim

表示方法は、nvimの方がよさげに見えるが・・・。
今更本体を乗り換えることはしない。

一応完成

上記の不満はあるが、一応は設定したと言うことにする。
まだまだJava言語の勉強をvim本体だけで完結するにはほど遠いが、今回の記事はこれで終わる。
ゆくゆくは、実行やデバッグなども出来るようにしたい。
※このポップアップ表示の設定をするためだけに今日1日潰してしまった。
あぁIDEが恋しい。

以上。