Клиент автозаполнения C# LSP для neovim / vim8

Я пробовал несколько способов заставить его работать, но, похоже, нет простого способа. Да, плагинов, конфигураций масса. Но по состоянию на октябрь 2019 года они не работают.

  • Клиент OmniSharp-Vim требует настройки, он охватывает только C# и содержит список интеграции плагинов, которая больше не работает (попробуйте выбрать ее для линтинга в ALE).
  • YouCompeleteMe должен работать, но он большой и кажется раздутым.
  • У Deoplete нет исходного кода для C#, а конфигурации, которые я обнаружил, устарели.
  • Coc.nvim даже не перечисляет C#, и у "неофициальных" конфигураций есть проблемы (вроде этой). К тому же Coc.nvim кажется пришельцем из VS Code.
  • https://github.com/autozimu/LanguageClient-neovim Я не нашел разумной конфигурации и похоже, потому что серверу C# LSP нужен файл.sln.

Таким образом, кажется, что csharpers должен перейти на VS (или Rider), и именно тогда MS предложила LSP. Как сделать так, чтобы IDE, подобная nvim, работала с C#?

Обычно клиент должен запускать сервер таким образом и использовать LSP.

~/.cache/omnisharp-vim/omnisharp-roslyn/run -s <PATH TO SLN OR DIR>

2 ответа

У меня только что omnisharp / ale успешно работают с чистой установкой. Вы можете полностью удалить omnisharp (~\AppData\Local\omnisharp-vim или ~/.omnisharp) на всякий случай у вас старые версии.

Вы не упомянули свою ОС; У меня это работает как в Windows 10, так и в Mac OS. Если вы используете Mac OS, убедитесь, что выbrew install libuv первый.

Моя среда

  • Windows 10 (v1903) и Mac OS 10.14.6
  • Vim 8.1.2244
  • dotnet core 3.1 - я бы ожидал, что 3.0 также будет работать

инструкции

Во-первых, я использую vim-plug в качестве диспетчера подключаемых модулей для установки. Я установил его как в Windows, так и в Mac OS, используя фрагменты bash/powershell в README vim-plug.

Затем я добавил в свой vimrc следующее (~\_vimrc в Windows, ~/.vimrc в Mac OS):

"vim-plug config
call plug#begin()
Plug 'OmniSharp/omnisharp-vim'
Plug 'dense-analysis/ale'
call plug#end()

" plugin config
let g:OmniSharp_server_stdio = 1

Перезагрузите vim и запустите :PlugInstall. Он будет клонировать для вас omnisharp и эль.

Затем найдите какое-нибудь решение C# и убедитесь, что решение строится в командной строке (например, dotnet buildдолжно пройти без ошибок). Вам также понадобится SLN-файл, если у вас его еще нет (dotnet new sln а потом dotnet sln add MyProj.csproj)

Выберите файл C# и откройте его в vim. Вы должны увидеть следующее уведомление:

Если установка не запускается автоматически, вы можете начать ее с :OmniSharpInstall. Установка занимает минуту или две загрузки в окне терминала. После завершения установки снова откройте vim и выполните:cd \path\to\my\solutionчтобы убедиться, что рабочий каталог внутри vim правильный. Затем откройте файл, например,:e MyProj\Program.cs.

Сервер запустится автоматически; не запускайте его вручную. Я получаю много синтаксических ошибок в течение первых нескольких секунд при запуске сервера, после чего у меня нет ошибок.

Чтобы открыть автозаполнение, введите что-нибудь вроде Console.затем нажмите Ctrl-x o:

На приведенном выше снимке экрана для нижней панели указана vim- airlines - это не часть omnisharp и не требуется.

Приведенные выше снимки экрана относятся к Windows, но они также отлично работают в Mac OS:

Мой полный vimrc доступен здесь, а исходный код, с которым я тестирую, доступен здесь.

Вот мои настройки для этого с использованием Deoplete, OmniSharp и ALE (полная конфигурация на https://github.com/artkpv/dotfiles/blob/master/.config/nvim/vimrc):

" Install Deoplete and OmniSharp:
" - OmniSharp/omnisharp-vim    " for LSP support (like start OmniSharp server) and code actions, etc
" - Shougo/deoplete.nvim       " for better autocompletion
" - dense-analysis/ale         " for highlights

function SetCSSettings()

    " Use deoplete.
    call deoplete#enable()

    " Use smartcase.
    call deoplete#custom#option('smart_case', v:true)

    " Use OmniSharp-vim omnifunc 
    call deoplete#custom#source('omni', 'functions', { 'cs':  'OmniSharp#Complete' })

    " Set how Deoplete filters omnifunc output.
    call deoplete#custom#var('omni', 'input_patterns', {
        \ 'cs': '[^. *\t]\.\w*',
        \})

    " ... then goes your mappings for :OmniSharp* functions, see its doc
endfunction

augroup csharp_commands
    autocmd!

    " Use smartcase.
    " call deoplete#custom#option('smart_case', v:true) 
    autocmd FileType cs call SetCSSettings()

augroup END
Другие вопросы по тегам