はじめに
Vimには標準で自動補完機能が備わっていません。したがって手動でLSPを導入したり、補完候補が表示されるように設定をする必要があります。
今回はvim-lsp
という非同期LSPを行うVimプラグインと、LSPの設定を簡易にしてくれるvim-lsp-settings
というプラグイン、そして自動補完の設定を行うddc.vim
というプラグインを導入していきます。
vim-lsp
に関しては自動補完以外にも定義ジャンプなど便利な機能もあるようですが、これについては別の機会にまとめようと思います。
Denoインストール
ddc.vim
がDenoで開発されているらしく、まずはDenoのインストールから行います。
$ brew install deno
Vimプラグインインストール
次に各Vimプラグインのインストールを行います。.vimrc
に下記を記述してVimプラグインをインストールして下さい。
"" ddc.vim本体
Plug 'Shougo/ddc.vim'
"" DenoでVimプラグインを開発するためのプラグイン
Plug 'vim-denops/denops.vim'
"" ポップアップウィンドウを表示するプラグイン
Plug 'Shougo/pum.vim'
"" カーソル周辺の既出単語を補完するsource
Plug 'Shougo/ddc-around'
"" ファイル名を補完するsource
Plug 'LumaKernel/ddc-file'
"" 入力中の単語を補完の対象にするfilter
Plug 'Shougo/ddc-matcher_head'
"" 補完候補を適切にソートするfilter
Plug 'Shougo/ddc-sorter_rank'
"" 補完候補の重複を防ぐためのfilter
Plug 'Shougo/ddc-converter_remove_overlap'
"" Install your UIs
Plug 'Shougo/ddc-ui-native'
Plug 'shun/ddc-vim-lsp'
※Vimプラグインのインストール方法が分からない場合はこちらをご参考下さい。
LanguageServerインストール
今回はvim-lsp-settings
を使って試しにPythonのLanguageServerをインストールしてみます。コマンドモードで下記のExコマンドを実行して下さい。
:LspInstallServer pylsp-all
インストールされたか下記のコマンドで確認して下さい。隣に「*」が付いていればインストール済みということになります。
※ちなみにLspManageServers
コマンドからでもLanguageServerのインストールは可能です。
:LspManageServers
インストールされた実際のスクリプトはMacの場合は下記の場所にダウンロードされています。
$ ls ~/.local/share/vim-lsp-settings/servers
pylsp-all
ddc.vimの設定
.vimrc
に下記の設定を追記して下さい。
"" ddc.vim
call ddc#custom#patch_global('ui', 'native')
call ddc#custom#patch_global('completionMenu', 'pum.vim')
call ddc#custom#patch_global('sources', [
\ 'around',
\ 'vim-lsp',
\ 'file',
\ 'pylsp-all',
\ ])
call ddc#custom#patch_global('sourceOptions', {
\ '_': {
\ 'matchers': ['matcher_head'],
\ 'sorters': ['sorter_rank'],
\ 'converters': ['converter_remove_overlap'],
\ },
\ 'around': {'mark': 'Around'},
\ 'vim-lsp': {
\ 'mark': 'LSP',
\ 'matchers': ['matcher_head'],
\ 'forceCompletionPattern': '\.|:|->|"\w+/*'
\ },
\ 'file': {
\ 'mark': 'file',
\ 'isVolatile': v:true,
\ 'forceCompletionPattern': '\S/\S*'
\ }})
call ddc#enable()
以上で設定は完了です。
動作確認
適当なPythonファイルを開いてきちんと動作しているか確認してみます。
LSPから補完候補がサジェストされていれば成功です。
終わりに
次は定義ジャンプの設定を行いたいと思います。