Vimの補完プラグインをインストール。その3

Vimの補完プラグインをインストール。その1でRuffは高速でBlackとFlake8とその他もろもろを置き換えできるという件を書きましたが、ちょっと気になったのでインストールしてみます。

Ruffの公式ブログでは、The Ruff Language Serverで、

Ruff can be used to replace Black, Flake8 (plus dozens of plugins), isort, pydocstyle, pyupgrade, and more, all while executing tens or hundreds of times faster than any individual tool.

isortやその他もろもろを置き換えて、さらに数十倍から数百倍も速い、とうたっています。 githubでは、python-lsp-ruffがありますが、0.4.5以降でRuffは "ruff server" でLSPサーバとして動作するとのことで、それなら直接vim-lspとお話できるはずです。

Ruffのドキュメントでは、もういきなりvim-lspから使用するためにvimrcに記載するコードが書かれていました。

if executable('ruff')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'ruff',
        \ 'cmd': {server_info->['ruff', 'server']},
        \ 'allowlist': ['python'],
        \ 'workspace_config': {},
        \ })
endif

さらに、他のLSP(Pyrightなど)の特定の機能を使いたいために、Ruffと組み合わせて使う場合には、

function! s:on_lsp_buffer_enabled() abort
    " add your keybindings here (see https://github.com/prabirshrestha/vim-lsp?tab=readme-ov-file#registering-servers)

    let l:capabilities = lsp#get_server_capabilities('ruff')
    if !empty(l:capabilities)
      let l:capabilities.hoverProvider = v:false
    endif
endfunction

などとするとよい、という設定も書かれています。tabnineなども使えるのかな?

余談ですが、tabnine-vimはdeprecatedになって、tabnine-nvimに開発が移っているようですが、LSPはお話しないので残念ながらNeovimのみが対象のようです。が、LSP経由ではなくてddc.vim経由なら、ddc-tabnineが使えそうです。

閑話休題。

ArchLinuxではextra/ruffパッケージが用意されているので、pacman -S ruffでインストールできます。

次にvimrcからpylspの設定をコメントアウトして、ruffの設定を加えます。

if (executable('ruff'))
    augroup RuffServer
        autocmd!
        autocmd User lsp_setup call lsp#register_server({
            \ 'name': 'ruff',
            \ 'cmd': {server_info->['ruff', 'server']},
            \ 'allowlist': ['python'],
            \ 'languageId': {server_info->'python'}
            \ })
    augroup END
endif

languageIdはあってもなくても。

これでVimを再起動してtest.pyなどと開くと、ちゃんと使えています。

あと、Vimでの折りたたみをLSPにやらせる設定も変えました。

" folding
" LSPにfoldをやらせる
augroup lsp_folding
    autocmd!
    autocmd FileType * setlocal
        \ foldmethod=expr
        \ foldexpr=lsp#ui#vim#folding#foldexpr()
        \ foldtext=lsp#ui#vim#folding#foldexpr()
    autocmd FileType vim setlocal
        \ foldmethod=syntax
        \ foldlevel=0
augroup end

vimrcを編集するときにLSPに折りたたみをやらせるとなんかウザかったので、vimだけ別扱いにしています。というか、* じゃなくてpythonにしてもよかったかも。

ddc-tabnineはまたそのうち。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...