下記ツイートを見たので、試してみた。
vim-lsp が安定してきたので jdt language server が普通に使える様になってしまった。LSP なので言ってみれば IDE とやれる事が同じ。Rename も動く。まだ仕事で使うつもりはないけど個人用途でチャラっと Java 書くなら良いね。何と言っても 10秒で Language Server 起動するの魅力的すぎる。 pic.twitter.com/Gm2Dxj8QLI
— mattn (@mattn_jp) January 16, 2019
前提
- OS: Windows 10 Pro
- Vim: 8.1 patch 573
- vim のパッケージ管理は vim8 のパッケージ機能 &
git submodule
を使っている
eclipse.jdt.ls のダウンロードと配置
次のサイトから jdt-language-server-0.32.0-201901231649.tar.gz
をダウンロードする。
- Eclipse JDT Language Server | projects.eclipse.org
Downloads
->Milestones builds
->0.32.0
->jdt-language-server-0.32.0-201901231649.tar.gz
今回は、 ~/eclipse.jdt.ls/
に配置するので、ディレクトリ ~/eclipse.jdt.ls/
を作って、 tar.gz
を展開してできたものを格納する。 格納するファイル(ディレクトリ)は次の 5 つ。
config_linux
config_mac
config_win
features
plugins
必要プラグインの導入
git submodule
で管理しているので、必要な vim プラグインを git リポジトリに登録する。 登録するプラグインは次の 2 つ。
cd /PATH/TO/dotvim
git submodule add https://github.com/prabirshrestha/async.vim ./.vim/pack/lsp/opt/async.vim
git submodule add https://github.com/prabirshrestha/vim-lsp ./.vim/pack/lsp/opt/vim-lsp
※ async.vim
は vim-lsp
用でしか使わない予定なので pack/lsp
内に入れてしまう。
vimrc へ vim-lsp の設定を追加
vim-lsp の README と eclipse.jdt.ls の README を見ながら .vimrc へ追記。
""" for java development
command! Javad call StartJavaDevelopment()
function! StartJavaDevelopment()
packadd async.vim
packadd vim-lsp
" ログ表示の設定
let g:lsp_log_verbose = 0
"let g:lsp_log_file = expand('~/vim-lsp.log')
"let g:asyncomplete_log_file = expand('~/asyncomplete.log')
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'eclipse.jdt.ls',
\ 'cmd': {server_info->[
\ 'c:\java\jdk1.8.0_201\bin\java',
\ '-Declipse.application=org.eclipse.jdt.ls.core.id1',
\ '-Dosgi.bundles.defaultStartLevel=4',
\ '-Declipse.product=org.eclipse.jdt.ls.core.product',
\ '-Dlog.level=ALL',
\ '-noverify',
\ '-Dfile.encoding=UTF-8',
\ '-Xmx1G',
\ '-jar',
\ fnamemodify("~", ":p") . '/eclipse.jdt.ls/plugins/org.eclipse.equinox.launcher_1.5.200.v20180922-1751.jar',
\ '-configuration',
\ fnamemodify("~", ":p") . '/eclipse.jdt.ls/config_win',
\ '-data',
\ fnamemodify("~", ":p") . '/eclipse.jdt.ls/workspace'
\ ]},
\ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'build.gradle'))},
\ 'whitelist': ['java'],
\ })
call lsp#enable()
autocmd FileType java setlocal omnifunc=lsp#complete
endfunction
「いつでも有効」にはしたくないので、 Javad
コマンドを実行したときに packadd
して必要な定義を行うようにした。
lsp#register_server
の値
- name: サーバ名
- サーバが判別できる任意の名前
- cmd: LSP 起動コマンド
- bat ファイル作ってそれを呼び出すようにしたほうがスマートっぽい
- root_uri: プロジェクトルートの場所
- ここでは vim-lsp のユーティリティを使って、
build.gradle
探すようにしている
- ここでは vim-lsp のユーティリティを使って、
- whitelist: この LSP サーバを使う FileType
これで、 eclipse.jdt.ls の補完結果が、 vim のオムニ補完に表示されるようになる。
補完系プラグインを使っているならば、そのヘルプに補完結果指定方法が書かれているはず。
以上。
0 件のコメント:
コメントを投稿