2020/12/11 このエントリーをはてなブックマークに追加 はてなブックマーク - VimでLSPを使ってKotlinを書く

VimでLSPを使ってKotlinを書く

カテゴリ: , ,


Kotlinアドベントカレンダー2020(https://qiita.com/advent-calendar/2020/kotlin)の10日目の記事です。





  • MacOS
  • Vim 8

このあたりを入れれば良いと思います。

  • prabirshrestha/vim-lsp
  • prabirshrestha/async.vim
  • prabirshrestha/asyncomplete.vim
  • prabirshrestha/asyncomplete-lsp.vim
  • mattn/vim-lsp-settings
  • udalov/kotlin-vim

vim-plugでもなんでもいいんですが、自分はdeinを使っているので、こんな感じに設定します。

[[plugins]]
repo = 'udalov/kotlin-vim'
hook_add = '''
    autocmd FileType kotlin nmap gd  <esc>:LspDefinition<CR>
'''
on_ft = 'kotlin'
[[plugins]]
repo = 'prabirshrestha/async.vim'
[[plugins]]
repo = 'prabirshrestha/vim-lsp'
hook_add = '''
  nnoremap <leader>ph :LspHover<CR>
  nnoremap <leader>pn :LspNextDiagnostic<CR>
  nnoremap <leader>pc :pclose<CR>
  autocmd FileType go nnoremap gd :<C-u> TagImposterAnticipateJump <Bar> LspDefinition<CR>
  autocmd FileType typescript nnoremap gd :<C-u> TagImposterAnticipateJump <Bar> LspDefinition<CR>
  autocmd FileType typescriptreact nnoremap gd :<C-u> TagImposterAnticipateJump <Bar> LspDefinition<CR>
  let g:lsp_signs_error = {'text': ' '}
  let g:lsp_signs_warning = {'text': ' '}
  let g:lsp_signs_hint = {'text': ' '}
  let g:lsp_log_verbose = 0
  " let g:lsp_log_file = expand('~/vim-lsp.log')
  " for asyncomplete.vim log
  " let g:asyncomplete_log_file = expand('~/asyncomplete.log')
'''
[[plugins]]
repo = 'prabirshrestha/asyncomplete.vim'
hook_add = '''
  imap <c-n> <Plug>(asyncomplete_force_refresh)
  imap <c-x> <Plug>(asyncomplete_force_refresh)
  imap <c-p> <Plug>(asyncomplete_force_refresh)
  let g:lsp_signs_enabled = 1
  let g:lsp_highlight_references_enabled = 1
  let g:lsp_highlights_enabled = 1
  let g:lsp_diagnostics_enabled = 1
  let g:lsp_async_completion = 1
  let g:lsp_auto_enable = 1
  let g:lsp_preview_autoclose = 0
  let g:lsp_preview_keep_focus = 0
  let g:lsp_preview_doubletap = 0
  let g:lsp_insert_text_enabled = 0
  let g:lsp_text_edit_enabled = 0
  let g:lsp_diagnostics_echo_cursor = 1
  let g:lsp_virtual_text_enabled = 0
  let g:lsp_textprop_enabled = 0
  let g:lsp_signature_help_enabled = 0
  let g:lsp_fold_enabled = 0
  let g:asyncomplete_auto_popup = 1
  let g:asyncomplete_auto_completeopt = 1
  let g:asyncomplete_remove_duplicates = 1
  let g:asyncomplete_smart_completion = 1
  set completeopt-=preview
  inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
  inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
  inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<cr>"
  function! s:check_back_space() abort
      let col = col('.') - 1
      return !col || getline('.')[col - 1]  =~ '\s'
  endfunction
  inoremap <silent><expr> <TAB>
    \ pumvisible() ? "\<C-n>" :
    \ <SID>check_back_space() ? "\<TAB>" :
    \ asyncomplete#force_refresh()
  inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
'''
[[plugins]]
repo = 'mattn/vim-lsp-settings'
hook_add = '''
    let g:lsp_settings_servers_dir = '/Users/yy_yank/.vim/lsp/server'
'''
[[plugins]]
repo = 'prabirshrestha/asyncomplete-lsp.vim'
[[plugins]]
repo = 'natebosch/vim-lsc'
hook_add = '''
'''

全体的な構成が気になる方はGitHubにベースとなる自分のやつが乗っているので見てみてもらえればいいかもしれないです。

https://github.com/yyYank/dotfiles/tree/master/macOS/.vim
https://github.com/yyYank/dotfiles/blob/master/macOS/.vimrc

  • prabirshrestha/vim-lsp はVimでLSPを使えるようにしている
  • prabirshrestha/async.vimとprabirshrestha/asyncomplete-lsp.vim はVimで非同期にLSPを使うために入れてる(たしか)
  • prabirshrestha/asyncomplete.vim はVimでLSPを使ったコード補完(completion)をするために使っている
  • mattn/vim-lsp-settings は LSPでいろんな言語に対応させるのをラクラクにするために使っている
  • udalov/kotlin-vim はシンタックスハイライトを入れるためとktの拡張子でfiletype=kotlinをdetectするために使っている

LSPについてとLSPをVimで使うための細かな説明はmattnさんのブログ記事をご参照ください。
https://mattn.kaoriya.net/software/vim/20191231213507.htm

これらの設定をして、VimでKotlinのファイルを開いた状態で :LspInstallServerとするとKotlinのLSPサーバーがインストールされるはずです。

そのあと :LspStatuskotlin-language-server: running って表示されればおk


こんな感じでコード補完とかできますし、定義ジャンプもできます。
















mattnさんのを見てもらった方がわかりやすいかもな…




とはいってもKotlinを書くためってことであればIntelliJ IDEAとかAndroid StudioとかみたいなIDEの方が便利だよ!(おい)
Vimが好きで仕方ない人、ちょろっとコード見るときにわざわざIDE使いたくない人などにおすすめです。




0 件のコメント:

コメントを投稿

GA