Machen Sie Ihr Vim/Neovim so intelligent wie VS Code
Benutzerdefiniertes Popup-Menü mit Snippet-Unterstützung
Schnell : Separater NodeJS-Prozess, der Vim die meiste Zeit nicht verlangsamt.
? Zuverlässig : getippte Sprache, getestet mit CI.
? Empfohlen : Alle LSP 3.16-Funktionen werden unterstützt, siehe :h coc-lsp
.
❤️ Flexibel : Coc-Erweiterungen sind wie VS Code konfiguriert und funktionieren ähnlich wie VS Code-Erweiterungen
Stellen Sie sicher, dass Sie Vim >= 9.0.0438 oder Neovim >= 0.8.0 verwenden.
Installieren Sie nodejs >= 16.18.0:
curl -sL install-node.vercel.app/lts | bash
Für vim-plug-Benutzer:
„Verwenden Sie den Release-Zweig (empfohlen)Plug 'neoclide/coc.nvim', {'branch': 'release'}" Oder erstellen Sie aus dem Quellcode mit npmPlug 'neoclide/coc.nvim', {'branch': 'master' , 'do': 'npm ci'}
in Ihrem .vimrc
oder init.vim
, starten Sie dann Vim neu und führen Sie :PlugInstall
aus.
Zur Kasse Installieren Sie coc.nvim für weitere Informationen.
Sie müssen COC-Erweiterungen installieren oder Sprachserver für die LSP-Unterstützung konfigurieren.
Installieren Sie Erweiterungen wie folgt:
:CocInstall coc-json coc-tsserver
Oder Sie können einen Sprachserver in Ihrer coc-settings.json
konfigurieren (öffnen Sie ihn mit :CocConfig
), wie folgt:
{ "Languageserver": {"go": { "command": "gopls", "rootPatterns": ["go.mod"], "trace.server": "verbose", "filetypes": ["go"] } } }
Weitere Informationen finden Sie im Wiki:
Ergänzung mit Quellenangaben
Verwendung der Konfigurationsdatei
Verwendung von COC-Erweiterungen
Konfigurieren Sie Sprachserver
FAQ
Kasse :h coc-nvim
für die Vim-Schnittstelle.
Eine Konfiguration ist erforderlich, um die Arbeit mit coc.nvim zu vereinfachen, da Ihre Tastenzuordnungen oder Vim-Optionen dadurch nicht geändert werden. Dies geschieht so weit wie möglich, um Konflikte mit Ihren anderen Plugins zu vermeiden.
❗️Wichtig : Einige Vim-Plugins können Ihre Tastenzuordnungen ändern. Bitte verwenden Sie einen Befehl wie :verbose imap <tab>
um sicherzustellen, dass Ihre Tastaturbelegung wirksam wurde.
„https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.vim“ Möglicherweise ist Vim (nicht Neovim) erforderlich, da coc.nvim den Byte-Offset anhand der Anzahl berechnet“ utf-8 Byte Sequenceset Encoding=utf-8" Einige Server haben Probleme mit Sicherungsdateien, siehe #649set nobackupset nowritebackup" Längere Aktualisierungszeit (Standard ist 4000 ms = 4 s) führt zu spürbaren Verzögerungen und schlechter Benutzererfahrung navigieren“ HINWEIS: Standardmäßig ist immer das vollständige Element ausgewählt. Möglicherweise möchten Sie in Ihrer Konfigurationsdatei „no select by „suggest.noselect“: true“ aktivieren. HINWEIS: Verwenden Sie den Befehl ':verbose imap <tab>', um sicherzustellen, dass die Registerkarte nicht von einem anderen Plugin zugeordnet wird, bevor Sie dies in Ihre Konfigurations-Remap einfügen <silent><expr> <TAB> coc#pum#visible() ? coc#pum#next(1) : CheckBackspace() ? "<Tab>" : coc#refresh()inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : „<Ch>“ „Machen Sie <CR>, um das ausgewählte Vervollständigungselement zu akzeptieren, oder benachrichtigen Sie coc.nvim zum Formatieren“ <Cg>u unterbricht das aktuelle Rückgängigmachen, bitte treffen Sie Ihre eigene Wahl inoremap <silent><expr > <CR> coc#pum#visible() ? coc#pum#confirm() : „<Cg>u<CR><cr>=coc#on_enter()<CR>“Funktion! CheckBackspace() Abbruch sei col = col('.') - 1 return !col || getline('.')[col - 1] =~# 's'endfunction" Verwenden Sie <c-space>, um die Vervollständigung auszulösenif has('nvim') inoremap <silent><expr> <c-space> coc#refresh( )anders inoremap <silent><expr> <c-@> coc#refresh()endif“ Verwenden Sie „[g“ und „]g“, um durch die Diagnose zu navigieren.“ Verwenden Sie „:CocDiagnostics“, um alle Diagnosen des aktuellen Puffers an der Position listnmap <silent abzurufen > [g <Plug>(coc-diagnostic-prev)nmap <silent> ]g <Plug>(coc-diagnostic-next)“ GoTo-Code navigationnmap <silent> gd <Plug>(coc-definition)nmap <silent> gy <Plug>(coc-type-definition)nmap <silent> gi <Plug>(coc-implementation)nmap <silent> gr <Plug>( coc-references)" Verwenden Sie K, um die Dokumentation im Vorschaufenster anzuzeigennnoremap <silent> K :call ShowDocumentation()<CR>function! ShowDocumentation() if CocAction('hasProvider', 'hover')call CocActionAsync('doHover') elsecall feedkeys('K', 'in') endifendfunction" Markieren Sie das Symbol und seine Referenzen, wenn Sie den Cursor gedrückt halten.autocmd CursorHold * stiller Aufruf von CocActionAsync( 'highlight')" Symbol renamingnmap <leader>rn <Plug>(coc-rename)" Formatierung der ausgewählten Codexmap <leader>f <Plug>(coc-format-selected)nmap <leader>f <Plug>(coc-format-selected)augroup mygroup autocmd! „Setup formatexpr spezifizierte(n) Dateityp(en) autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Signaturhilfe für Sprungplatzhalter aktualisieren autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')augroup end" Anwenden von Codeaktionen auf den ausgewählten Codeblock" Beispiel: `<leader>aap` für aktuellen Absatzxmap <leader>a <Plug>(coc-codeaction-selected)nmap <leader >a <Plug>(coc-codeaction-selected)“ Neuzuordnung der Tasten zum Anwenden von Codeaktionen an der Cursorpositionnmap <leader>ac <Plug>(coc-codeaction-cursor)" Neuzuordnung der Tasten zum Anwenden von Codeaktionen wirkt sich auf die gesamte Buffernmap <leader>als <Plug>(coc-codeaction-source)" aus. Wenden Sie die am meisten bevorzugte Quickfix-Aktion an, um die Diagnose auf der aktuellen Linenmap <leader zu beheben >qf <Plug>(coc-fix-current)“ Remap-Schlüssel zum Anwenden von Refactor-Code-Aktionennmap <silent> <leader>re <Plug>(coc-codeaction-refactor)xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected) „Führen Sie die Code Lens-Aktion auf der aktuellen Linenmap <leader>cl <Plug>(coc-codelens-action) aus“ Map-Funktion und Klassentextobjekte“ HINWEIS: Erforderlich 'textDocument.documentSymbol'-Unterstützung vom Sprachserverxmap if <Plug>(coc-funcobj-i)omap if <Plug>(coc-funcobj-i)xmap af <Plug>(coc-funcobj-a)omap af <Plug> (coc-funcobj-a)xmap ic <Plug>(coc-classobj-i)omap ic <Plug>(coc-classobj-i)xmap ac <Plug>(coc-classobj-a)omap ac <Plug>(coc-classobj-a)" Ordnen Sie <Cf> und <Cb> neu zu, um schwebende Fenster/Popups zu scrollen, wenn dies der Fall ist ('nvim-0.4.0') || has('patch-8.2.0750') nnoremap <silent><nowait><expr> <Cf> coc#float#has_scroll() ? coc#float#scroll(1) : "<Cf>" nnoremap <silent><nowait><expr> <Cb> coc#float#has_scroll() ? coc#float#scroll(0) : "<Cb>" inoremap <silent><nowait><expr> <Cf> coc#float#has_scroll() ? "<cr>=coc#float#scroll(1)<cr>" : "<Right>" inoremap <silent><nowait><expr> <Cb> coc#float#has_scroll() ? "<cr>=coc#float#scroll(0)<cr>" : "<Left>" vnoremap <silent><nowait><expr> <Cf> coc#float#has_scroll() ? coc#float#scroll(1) : "<Cf>" vnoremap <silent><nowait><expr> <Cb> coc#float#has_scroll() ? coc#float#scroll(0): „<Cb>“endif“ Verwenden Sie STRG-S für Auswahlbereiche.“ Erfordert „textDocument/selectionRange“-Unterstützung der Sprache servernmap <silent> <Cs> <Plug>(coc-range-select) xmap <silent> <Cs> <Plug>(coc-range-select)" Befehl „:Format“ hinzufügen, um den aktuellen Pufferbefehl zu formatieren! -nargs=0 Format :call CocActionAsync('format')" Füge den Befehl „:Fold“ hinzu, um den aktuellen Pufferbefehl zu falten! -nargs=? Fold :call CocAction('fold', <f-args>)" Füge den Befehl „:OR“ zum Organisieren von Importen des aktuellen Pufferbefehls hinzu! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport' )" (Neo)Vims native Statusline-Unterstützung hinzufügen" HINWEIS: Bitte sehen Sie sich `:h coc-status` für Integrationen mit externen Plugins an, die" benutzerdefinierte bereitstellen statusline: lightline.vim, vim-airlineset statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}" Zuordnungen für CoCList" Alle Diagnosen anzeigennnoremap <silent><nowait> < space>a :<Cu>CocList Diagnostics<cr>" Erweiterungen verwaltennnoremap <silent><nowait> <space>e :<Cu>CocList extensions<cr>" Befehle anzeigennnoremap <silent><nowait> <Leerzeichen>c :<Cu>CocList-Befehle<cr>" Symbol des aktuellen Dokuments suchennnoremap <silent><nowait> <Leerzeichen>o :<Cu >CocList Gliederung<cr>" Durchsuchen Sie Arbeitsbereichssymbolennoremap <silent><nowait> <space>s :<Cu>CocList -I Symbols<cr>" Standardaktion für nächstes Element ausführennnoremap <silent><nowait> <space>j :<Cu>CocNext<CR>" Standardaktion für vorheriges Element ausführennnoremap <silent><nowait> < space>k :<Cu>CocPrev<CR>" Resume last coc listnnoremap <silent><nowait> <space>p :<Cu>CocListResume<CR>
HINWEIS: Dies funktioniert nur in Neovim 0.7.0dev+.
-- https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.lua-- Einige Server haben Probleme mit Sicherungsdateien, siehe #649vim.opt.backup = falsevim.opt .writebackup = false – Eine längere Aktualisierungszeit (Standard ist 4000 ms = 4 s) führt zu spürbaren Verzögerungen und schlechter Benutzerfreundlichkeit experiencevim.opt.updatetime = 300 – Zeigt immer die Signcolumn an, sonst würde der Text jedes Mal verschoben – Diagnose erschien/wurde gelöstvim.opt.signcolumn = „yes“local keyset = vim.keymap.set – Autocompletefunction _G. check_back_space()local col = vim.fn.col('.') - 1return col == 0 oder vim.fn.getline('.'):sub(col, col):match('%s') ~= nilend-- Verwenden Sie die Tabulatortaste, um die Vervollständigung mit voranstehenden Zeichen auszulösen und zu navigieren.-- HINWEIS: Es ist immer ein Vervollständigungselement ausgewählt Standardmäßig möchten Sie möglicherweise „keine Auswahl“ aktivieren, indem Sie „suggest.noselect“: true“ in Ihrer Konfigurationsdatei festlegen. HINWEIS: Verwenden Sie den Befehl „:verbose imap <tab>“, um sicherzustellen, dass „Tab“ nicht zugeordnet ist. - andere Plugins, bevor Sie dies in Ihre Konfiguration einfügen. opts = {silent = true, noremap = true, expr = true, replace_keycodes = false}keyset("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts)keyset("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "< Ch>"]], opts)-- Machen Sie <CR>, um das ausgewählte Vervollständigungselement zu akzeptieren, oder benachrichtigen Sie coc.nvim zum Formatieren-- <Cg>u unterbricht das aktuelle Rückgängigmachen, bitte treffen Sie Ihre eigene Auswahlkeyset("i", „<cr>“, [[coc#pum#visible() ? coc#pum#confirm() : „<Cg>u<CR><cr>=coc#on_enter()<CR>“]], opts) -- Verwenden Sie <cj>, um snippetskeyset("i", "<cj>", "<Plug>(coc-snippets-expand-jump))" auszulösen. -- Verwenden Sie <c-space>, um auszulösen Vervollständigungkeyset("i", "<c-space>", "coc#refresh()", {silent = true, expr = true}) – Verwenden Sie „[g“ und „]g“, um durch die Diagnose zu navigieren. – Verwenden Sie `:CocDiagnostics`, um alle Diagnosen des aktuellen Puffers am Speicherort abzurufen listkeyset("n", "[g", "<Plug>(coc-diagnostic-prev)", {silent = true})keyset("n", "]g", "<Plug>(coc-diagnostic-next)", {silent = true})-- GoTo code navigationkeyset("n", "gd", "<Plug>(coc-definition)", { Silent = true})keyset("n", "gy", "<Plug>(coc-type-definition)", {silent = true})keyset("n", "gi", "<Plug>(coc -Durchführung)", {silent = true})keyset("n", "gr", "<Plug>(coc-references)", {silent = true})-- Verwenden Sie K, um die Dokumentation im Vorschaufenster anzuzeigen. Funktion _G.show_docs()local cw = vim.fn.expand('<cword>')if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 thenvim.api.nvim_command('h ' .. cw)elseif vim.api.nvim_eval('coc#rpc#ready()') thenvim.fn.CocActionAsync('doHover')elsevim.api.nvim_command('!' . . vim.o.keywordprg .. ' ' .. cw)endendkeyset("n", "K", '<CMD>lua _G.show_docs()<CR>', {silent = true})-- Markieren Sie das Symbol und seine Referenzen bei einem CursorHold-Ereignis (Cursor ist inaktiv) vim.api.nvim_create_augroup("CocGroup", {})vim.api.nvim_create_autocmd("CursorHold", {group = "CocGroup",command = "stiller Aufruf CocActionAsync('highlight')",desc = "Symbol unter Cursor auf CursorHold hervorheben"})-- Symbol renamingkeyset("n", "<leader>rn", "<Plug>( coc-rename)", {silent = true})-- Formatierung des ausgewählten Codekeyset("x", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})keyset("n", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})-- Setup formatexpr spezifizierte Dateitypenvim.api.nvim_create_autocmd ("FileType", {group = "CocGroup",pattern = "typescript,json",command = "setl formatexpr=CocAction('formatSelected')",desc = „Formatexpr spezifizierte Dateitypen einrichten.“}) – Signaturhilfe bei Sprung aktualisieren placeholdervim.api.nvim_create_autocmd(“User“, {group = „CocGroup“,pattern = „CocJumpPlaceholder“,command = „call CocActionAsync('showSignatureHelp ')",desc = "Signaturhilfe bei Sprungplatzhalter aktualisieren"})-- CodeAction auf die ausgewählte Region anwenden -- Beispiel: `<leader>aap` für den aktuellen Absatzlocal opts = {silent = true, nowait = true}keyset("x", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)keyset( „n“, „<leader>a“, „<Plug>(coc-codeaction-selected)“, opts) – Tasten neu zuordnen, um Codeaktionen an der Cursorposition anzuwenden.keyset(“n“, „<leader>ac“, „<Plug>(coc-codeaction-cursor)“, opts) – Schlüssel neu zuordnen, um Quellcode-Aktionen für die aktuelle Datei anzuwenden.keyset(“