Клиент автозаполнения 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