neoclide/coc.nvim

neoclide/coc.nvim hiện có 25.2k sao trên GitHub, viết chủ yếu bằng TypeScript. Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers.
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
Snapshot
Cộng tác viên hàng đầu
Xem cộng tác viên hàng đầu
Make your Vim/Neovim as smart as VS Code
Custom popup menu with snippet support
Why?
- 🚀 Fast: a separate Node.js process that does not slow down Vim most of the time.
- 💎 Reliable: typed language, tested with CI.
- 🌟 Featured: most LSP 3.18 features are supported, see
:h coc-lsp. - ❤️ Flexible: configured like VS Code, Coc extensions function similarly to VS Code extensions
Quick Start
Make sure you use Vim >= 9.0.0438 or Neovim >= 0.8.0.
Install Node.js >= 20.19.0:
curl -sL install-node.vercel.app/lts | bash
For vim-plug users:
" Use release branch (recommended)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Or build from source code by using npm
Plug 'neoclide/coc.nvim', {'branch': 'master', 'do': 'npm ci'}
in your .vimrc or init.vim, then restart Vim and run :PlugInstall.
Check out Install coc.nvim for more info.
You have to install coc extensions or configure language servers for LSP support.
Install extensions like this:
:CocInstall coc-json coc-tsserver
Or you can configure a language server in your coc-settings.json (open it using :CocConfig) like this:
{
"languageserver": {
"go": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"trace.server": "verbose",
"filetypes": ["go"]
}
}
}
Check out the wiki for more details:
- Completion with sources
- Create custom source
- Debug coc.nvim
- Debug language server
- Environment variables
- F.A.Q
- Install coc.nvim
- Language servers
- Multiple cursors support
- Nvim notifications integration
- Statusline integration
- Using the configuration file
- Using coc extensions
- Using coc list
- Using snippets
- Using workspaceFolders
Check out :h coc-nvim for the Vim interface.
Example Vim configuration
Configuration is required to make coc.nvim easier to work with, since it doesn't change your key-mappings or Vim options. This is done as much as possible to avoid conflict with your other plugins.
❗️Important: Some Vim plugins can change your key mappings. Please use
command like:verbose imap <tab> to make sure that your keymap has taken effect.
" https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.vim
" May need for Vim (not Neovim) since coc.nvim calculates byte offset by count
" utf-8 byte sequence
set encoding=utf-8
" Some servers have issues with backup files, see #649
set nobackup
set nowritebackup
" Having longer updatetime (default is 4000 ms = 4s) leads to noticeable
" delays and poor user experience
set updatetime=300
" Always show the signcolumn, otherwise it would shift the text each time
" diagnostics appear/become resolved
set signcolumn=yes
" Use tab for trigger completion with characters ahead and navigate
" NOTE: There's always complete item selected by default, you may want to enable
" no select by `"suggest.noselect": true` in your configuration file
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config
inoremap <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) : "\<C-h>"
" Make <CR> to accept selected completion item or notify coc.nvim to format
" <C-g>u breaks current undo, please make your own choice
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <c-space> to trigger completion
if has('nvim')
inoremap <silent><expr> <c-space> coc#refresh()
else
inoremap <silent><expr> <c-@> coc#refresh()
endif
" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
nmap <silent><nowait> [g <Plug>(coc-diagnostic-prev)
nmap <silent><nowait> ]g <Plug>(coc-diagnostic-next)
" GoTo code navigation
nmap <silent><nowait> gd <Plug>(coc-definition)
nmap <silent><nowait> gy <Plug>(coc-type-definition)
nmap <silent><nowait> gi <Plug>(coc-implementation)
nmap <silent><nowait> gr <Plug>(coc-references)
" Use K to show documentation in preview window
nnoremap <silent> K :call ShowDocumentation()<CR>
function! ShowDocumentation()
if CocAction('hasProvider', 'hover')
call CocActionAsync('doHover')
else
call feedkeys('K', 'in')
endif
endfunction
" Highlight the symbol and its references when holding the cursor
autocmd CursorHold * silent call CocActionAsync('highlight')
" Symbol renaming
nmap <leader>rn <Plug>(coc-rename)
" Formatting selected code
xmap <leader>f <Plug>(coc-format-selected)
nmap <leader>f <Plug>(coc-format-selected)
augroup mygroup
autocmd!
" Setup formatexpr specified filetype(s)
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
augroup end
" Applying code actions to the selected code block
" Example: `<leader>aap` for current paragraph
xmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>a <Plug>(coc-codeaction-selected)
" Remap keys for applying code actions at the cursor position
nmap <leader>ac <Plug>(coc-codeaction-cursor)
" Remap keys for apply code actions affect whole buffer
nmap <leader>as <Plug>(coc-codeaction-source)
" Apply the most preferred quickfix action to fix diagnostic on the current line
nmap <leader>qf <Plug>(coc-fix-current)
" Remap keys for applying refactor code actions
nmap <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)
" Run the Code Lens action on the current line
nmap <leader>cl <Plug>(coc-codelens-action)
" Map function and class text objects
" NOTE: Requires 'textDocument.documentSymbol' support from the language server
xmap 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)
" Remap <C-f> and <C-b> to scroll float windows/popups
if has('nvim-0.4.0') || has('patch-8.2.0750')
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif
" Use CTRL-S for selections ranges
" Requires 'textDocument/selectionRange' support of language server
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(coc-range-select)
" Add `:Format` command to format current buffer
command! -nargs=0 Format :call CocActionAsync('format')
" Add `:Fold` command to fold current buffer
command! -nargs=? Fold :call CocAction('fold', <f-args>)
" Add `:OR` command for organize imports of the current buffer
command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport')
" Add (Neo)Vim's native statusline support
" NOTE: Please see `:h coc-status` for integrations with external plugins that
" provide custom statusline: lightline.vim, vim-airline
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
" Mappings for CoCList
" Show all diagnostics
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
" Manage extensions
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
" Show commands
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
" Find symbol of current document
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
" Search workspace symbols
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
" Do default action for next item
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
" Do default action for previous item
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
" Resume latest coc list
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
Example Lua configuration
NOTE: This only works in Neovim 0.8.0+.
-- https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.lua
-- Some servers have issues with backup files, see #649
vim.opt.backup = false
vim.opt.writebackup = false
-- Having longer updatetime (default is 4000 ms = 4s) leads to noticeable
-- delays and poor user experience
vim.opt.updatetime = 300
-- Always show the signcolumn, otherwise it would shift the text each time
-- diagnostics appeared/became resolved
vim.opt.signcolumn = "yes"
local keyset = vim.keymap.set
-- Autocomplete
function _G.check_back_space()
local col = vim.fn.col('.') - 1
return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil
end
-- Use Tab for trigger completion with characters ahead and navigate
-- NOTE: There's always a completion item selected by default, you may want to enable
-- no select by setting `"suggest.noselect": true` in your configuration file
-- NOTE: Use command ':verbose imap <tab>' to make sure Tab is not mapped by
-- other plugins before putting this into your config
local 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) : "\<C-h>"]], opts)
-- Make <CR> to accept selected completion item or notify coc.nvim to format
-- <C-g>u breaks current undo, please make your own choice
keyset("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts)
-- Use <c-j> to trigger snippets
keyset("i", "<c-j>", "<Plug>(coc-snippets-expand-jump)")
-- Use <c-space> to trigger completion
keyset("i", "<c-space>", "coc#refresh()", {silent = true, expr = true})
-- Use `[g` and `]g` to navigate diagnostics
-- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
keyset("n", "[g", "<Plug>(coc-diagnostic-prev)", {silent = true})
keyset("n", "]g", "<Plug>(coc-diagnostic-next)", {silent = true})
-- GoTo code navigation
keyset("n", "gd", "<Plug>(coc-definition)", {silent = true})
keyset("n", "gy", "<Plug>(coc-type-definition)", {silent = true})
keyset("n", "gi", "<Plug>(coc-implementation)", {silent = true})
keyset("n", "gr", "<Plug>(coc-references)", {silent = true})
-- Use K to show documentation in preview window
function _G.show_docs()
local cw = vim.fn.expand('<cword>')
if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then
vim.api.nvim_command('h ' .. cw)
elseif vim.api.nvim_eval('coc#rpc#ready()') then
vim.fn.CocActionAsync('doHover')
else
vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw)
end
end
keyset("n", "K", '<CMD>lua _G.show_docs()<CR>', {silent = true})
-- Highlight the symbol and its references on a CursorHold event(cursor is idle)
vim.api.nvim_create_augroup("CocGroup", {})
vim.api.nvim_create_autocmd("CursorHold", {
group = "CocGroup",
command = "silent call CocActionAsync('highlight')",
desc = "Highlight symbol under cursor on CursorHold"
})
-- Symbol renaming
keyset("n", "<leader>rn", "<Plug>(coc-rename)", {silent = true})
-- Formatting selected code
keyset("x", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})
keyset("n", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})
-- Setup formatexpr specified filetype(s)
vim.api.nvim_create_autocmd("FileType", {
group = "CocGroup",
pattern = "typescript,json",
command = "setl formatexpr=CocAction('formatSelected')",
desc = "Setup formatexpr specified filetype(s)."
})
-- Apply codeAction to the selected region
-- Example: `<leader>aap` for current paragraph
local opts = {silent = true, nowait = true}
keyset("x", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)
keyset("n", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)
-- Remap keys for apply code actions at the cursor position.
keyset("n", "<leader>ac", "<Plug>(coc-codeaction-cursor)", opts)
-- Remap keys for apply source code actions for current file.
keyset("n", "<leader>as", "<Plug>(coc-codeaction-source)", opts)
-- Apply the most preferred quickfix action on the current line.
keyset("n", "<leader>qf", "<Plug>(coc-fix-current)", opts)
-- Remap keys for apply refactor code actions.
keyset("n", "<leader>re", "<Plug>(coc-codeaction-refactor)", { silent = true })
keyset("x", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true })
keyset("n", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true })
-- Run the Code Lens actions on the current line
keyset("n", "<leader>cl", "<Plug>(coc-codelens-action)", opts)
-- Map function and class text objects
-- NOTE: Requires 'textDocument.documentSymbol' support from the language server
keyset("x", "if", "<Plug>(coc-funcobj-i)", opts)
keyset("o", "if", "<Plug>(coc-funcobj-i)", opts)
keyset("x", "af", "<Plug>(coc-funcobj-a)", opts)
keyset("o", "af", "<Plug>(coc-funcobj-a)", opts)
keyset("x", "ic", "<Plug>(coc-classobj-i)", opts)
keyset("o", "ic", "<Plug>(coc-classobj-i)", opts)
keyset("x", "ac", "<Plug>(coc-classobj-a)", opts)
keyset("o", "ac", "<Plug>(coc-classobj-a)", opts)
-- Remap <C-f> and <C-b> to scroll float windows/popups
---@diagnostic disable-next-line: redefined-local
local opts = {silent = true, nowait = true, expr = true}
keyset("n", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts)
keyset("n", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts)
keyset("i", "<C-f>",
'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(1)<cr>" : "<Right>"', opts)
keyset("i", "<C-b>",
'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(0)<cr>" : "<Left>"', opts)
keyset("v", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts)
keyset("v", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts)
-- Use CTRL-S for selections ranges
-- Requires 'textDocument/selectionRange' support of language server
keyset("n", "<C-s>", "<Plug>(coc-range-select)", {silent = true})
keyset("x", "<C-s>", "<Plug>(coc-range-select)", {silent = true})
-- Add `:Format` command to format current buffer
vim.api.nvim_create_user_command("Format", "call CocAction('format')", {})
-- " Add `:Fold` command to fold current buffer
vim.api.nvim_create_user_command("Fold", "call CocAction('fold', <f-args>)", {nargs = '?'})
-- Add `:OR` command for organize imports of the current buffer
vim.api.nvim_create_user_command("OR", "call CocActionAsync('runCommand', 'editor.action.organizeImport')", {})
-- Add (Neo)Vim's native statusline support
-- NOTE: Please see `:h coc-status` for integrations with external plugins that
-- provide custom statusline: lightline.vim, vim-airline
vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}")
-- Mappings for CoCList
-- code actions and coc stuff
---@diagnostic disable-next-line: redefined-local
local opts = {silent = true, nowait = true}
-- Show all diagnostics
keyset("n", "<space>a", ":<C-u>CocList diagnostics<cr>", opts)
-- Manage extensions
keyset("n", "<space>e", ":<C-u>CocList extensions<cr>", opts)
-- Show commands
keyset("n", "<space>c", ":<C-u>CocList commands<cr>", opts)
-- Find symbol of current document
keyset("n", "<space>o", ":<C-u>CocList outline<cr>", opts)
-- Search workspace symbols
keyset("n", "<space>s", ":<C-u>CocList -I symbols<cr>", opts)
-- Do default action for next item
keyset("n", "<space>j", ":<C-u>CocNext<cr>", opts)
-- Do default action for previous item
keyset("n", "<space>k", ":<C-u>CocPrev<cr>", opts)
-- Resume latest coc list
keyset("n", "<space>p", ":<C-u>CocListResume<cr>", opts)
MCP Server
coc.nvim can act as a Model Context Protocol server so agents like OpenAI Codex can read editor buffers (including unsaved changes), query the language servers and apply edits that stay in sync with Vim/Neovim.
The MCP server can expose read and write operations to connected clients. Only connect trusted clients, and use mcp.allowedPaths, mcp.deniedPaths and mcp.allowedTools to restrict access when needed.
Auto start it in coc-settings.json (disabled by default):
{
"mcp": {
"autoStart": true
}
}
Register the stdio bridge in ~/.codex/config.toml:
[mcp_servers.coc]
command = "node"
args = ["/path/to/coc.nvim/bin/coc-mcp.js"]
enabled = true
Run codex mcp list to verify the server, then call tools such as document/read, lsp/references or workspace/apply_edit. See doc/coc-mcp.txt for the interface specification. List the available tools in vim with :CocCommand mcp.status or via the MCP tools/list request.
During initialization, the bridge waits up to five seconds for a usable coc.nvim connection before returning an error. Start vim/nvim with coc.nvim and "mcp.autoStart": true, or run :CocCommand mcp.start, before launching Codex. Set COC_MCP_STARTUP_TIMEOUT_MS to change the timeout.
Articles
- coc.nvim 插件体系介绍
- CocList 入坑指南
- Create coc.nvim extension to improve Vim experience
- How to write a coc.nvim extension (and why)
Troubleshooting
Try these steps if you experience problems with coc.nvim:
- Ensure your Vim version is >= 9.0.0438 or your Neovim version is >= 0.8.0 using
:version - If a service failed to start, use
:CocInfoor:checkhealthif you use Neovim - Check the coc.nvim log with
:CocOpenLog - If you have issues with the language server, it's recommended to check out the language server output
Feedback
- Have a question? Start a discussion on GitHub Discussions.
- File a bug in GitHub Issues.
Backers
Become a backer and get your image on our README on GitHub with a link to your site.
Contributors
Qiming zhao 💻 | Heyward Fann 💻 | Raidou 💻 | kevinhwang91 💻 | 年糕小豆汤 💻 | Avi Dessauer 💻 | 最上川 💻 |
Yatao Li 💻 | wongxy 💻 | Sam McCall 💻 | Samuel Roeca 💻 | Amirali Esmaeili 💻 | Jack Rowlingson 💻 | Jaehwang Jung 💻 |
Antoine 💻 | Cosmin Popescu 💻 | Duc Nghiem Xuan 💻 | Francisco Lopes 💻 | daquexian 💻 | dependabot[bot] 💻 | greenkeeper[bot] 💻 |
Chris Kipp 💻 | Dmytro Meleshko 💻 | Kirill Bobyrev 💻 | Gontran Baerts 💻 | Andy 💻 | Cheng JIANG 💻 | Corin 💻 |
Daniel Zhang 💻 | Ferdinand Bachmann 💻 | Guangqing Chen 💻 | Jade Meskill 💻 | Jasper Poppe 💻 | Jean Jordaan 💻 | Kid 💻 |
Pieter van Loon 💻 | Robert Liebowitz 💻 | Seth Messer 💻 | UncleBill 💻 | ZERO 💻 | fsouza 💻 | XiaoZhang 💻 |
whyreal 💻 | yehuohan 💻 | バクダンくん 💻 | Raphael 💻 | tbodt 💻 | Aaron McDaid 💻 | Aasif Versi 💻 |
Abner Silva 💻 | Adam Stankiewicz 💻 | Adamansky Anton 💻 | Ahmed El Gabri 💻 | Alexandr Kondratev 💻 | Andrew Shim 💻 | Andy Lindeman 💻 |
Augustin 💻 | Bastien Orivel 💻 | Ben Lu 💻 | Ben 💻 | Brendan Roy 💻 | brianembry 💻 | br 💻 |
Cason Adams 💻 | Chang Y 💻 | Chayoung You 💻 | Chen Lijun 💻 | Chen Mulong 💻 | Chris Weyl 💻 | dezza 💻 |
Cody Allen 💻 | Damien Rajon 💻 | Daniel Eriksson 💻 | Daniel Jenson 💻 | David Mejorado 💻 | Deric Pang 💻 | Ding Tao 💻 |
Doron Behar 💻 | Egor Kovetskiy 💻 | ElKowar 💻 | Emeliov Dmitrii 💻 | Fabian Becker 💻 | FallenWarrior2k 💻 | Fausto Núñez Alberro 💻 |
Felipe Ramos 💻 | Fredrik Borg 💻 | Gavin Sim 💻 | Gibson Fahnestock 💻 | Giovanni Giordano 💻 | Gopal Adhikari 💻 | Hanh Le 💻 |
hedy 💻 | Hendrik Lammers 💻 | Henry Barreto 💻 | Hugo 💻 | Jackie Li 💻 | Jakub Nowak 💻 | James Pickard 💻 |
Jia Sui 💻 | Ellie Hermaszewska 💻 | Joel Bradshaw 💻 | John Carlo Roberto 💻 | Jonas Holst Damtoft 💻 | Jonathan Lehman 💻 | Joosep Alviste 💻 |
Josa Gesell 💻 | Joshua Rubin 💻 | Julian Grinblat 💻 | Julian Valentin 💻 | KabbAmine 💻 | Kay Gosho 💻 | Kenny Huynh 💻 |
Kevin Rambaud 💻 | Kian Cross 💻 | Kristijan Husak 💻 | NullVoxPopuli 💻 | Lasse Peters 💻 | Noel Errenil 💻 | LinArcX 💻 |
Liu-Cheng Xu 💻 | Marc 💻 | Marius Gawrisch 💻 | Mark Hintz 💻 | Mathieu Le Tiec 💻 | Matt White 💻 | Matthew Evans 💻 |
Me1onRind 💻 | Qyriad 💻 | Narcis B. 💻 | Neur1n 💻 | Nicolas Dermine 💻 | Noah 💻 | PENG Rui 💻 |
Paco 💻 | Peng Guanwen 💻 | Petter Wahlman 💻 | Pooya Moradi 💻 | Quade Morrison 💻 | Ralf Vogler 💻 | Ran Chen 💻 |
Ricardo García Vega 💻 | Rick Jones 💻 | Ryan Christian 💻 | Salo 💻 | Sam Nolan 💻 | Saurav 💻 | Sean Mackesey 💻 |
Sheel Patel 💻 | Solomon Ng 💻 | Sri Kadimisetty 💻 | Stephen Prater 💻 | Sune Kibsgaard 💻 | Aquaakuma 💻 | Takumi Kawase 💻 |
The Blob SCP 💻 | Tomasz N 💻 | Tomoyuki Harada 💻 | Tony Fettes 💻 | Tony Narlock 💻 | Tony Wang 💻 | Victor Quach 💻 |
Whisperity 💻 | William Turner 💻 | Xiaochao Dong 💻 | Hugh Hou 💻 | Jackie Li 💻 | Zachary Freed 💻 | akiyosi 💻 |
alexjg 💻 | aste4 💻 | clyfish 💻 | dev7ba 💻 | diartyz 💻 | doza-daniel 💻 | equal-l2 💻 |
fong 💻 | hexh 💻 | hhiraba 💻 | ic-768 💻 | javiertury 💻 | karasu 💻 | kevineato 💻 |
Eduardo Costa 💻 | micchy326 💻 | midchildan 💻 | minefuto 💻 | miyanokomiya 💻 | miyaviee 💻 | monkoose 💻 🐛 |
mujx 💻 | mvilim 💻 | naruaway 💻 | piersy 💻 | ryantig 💻 | rydesun 💻 | sc00ter 💻 |
smhc 💻 | Sam Kaplan 💻 | tasuten 💻 | todesking 💻 | typicode 💻 | 李鸣飞 💻 | Ikko Ashimine 📖 |
Rammiah 🐛 | Alisue 🐛 | bigshans 📖 | Robert Boyd III 🐛 | Yuki Iwanaga 💻 | SpringHack 🐛 | Lucas Burns 📖 |
qiqiboy 💻 | timsu92 📖 | Shawn M Moore 💻 | Aaron U'Ren 🐛 | SeniorMars 📖 | 牧羊犬真Q 📖 | geraldspreer 📖 |
Fabio 📖 | Li Yunting 🐛 | Jeff L. 💻 | Elliot Winkler 💻 | Svetlozar Iliev 💻 | James Garbutt 💻 | Qingzhou Yue 💻 |
Maarten de Vries 💻 | A4-Tacks 💻 | forceofsystem 💻 | lake 💻 | David O'Trakoun 📖 | aispeaking 💻 | Christian Clauss 💻 |
Micah Halter 💻 | Cristiano De Michele 💻 | Yong Jie 💻 | Kira Oakley 📖 | Merouane Atig 📖 | Gerald 💻 | Nicklas Sedlock 💻 |
Adam Tao 💻 | itsf4llofstars 📖 | Brian Wo 📖 | Eric Wong 💻 | oxalica 💻 | Christian Zangl 💻 | zoumi 💻 |
atitcreate 💻 |
This project follows the all-contributors specification. Contributions of any kind are welcome!
License
Anti 996
Repo liên quan
Neovim is an open-source project at neovim/neovim that refactors Vim's internals to make the editor easier to maintain, easier to split across contributors, and open to modern interfaces without patching the core. It ships a plugin API reachable from languages including Lua, Python, Ruby, Go, and JavaScript/Node.js, an embedded terminal emulator, and asynchronous job control, while staying compatible with most existing Vim plugins.
fzf is a Go-based command-line fuzzy finder that turns any piped list — files, shell history, running processes — into an interactively searchable menu, with official shell integration for Bash, Zsh, Fish, and Nushell plus a Vim/Neovim plugin. It's released under the MIT license and distributed as a single binary across Homebrew, most Linux package managers, and Windows package managers like Scoop and Chocolatey.
Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞
The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.
Trả lời nhanh
Cùng nhóm Developer Tools còn repo nào?
neoclide/coc.nvim thuộc nhóm Developer Tools trên TopGit, cùng 7 topic GitHub. Trang Trending và Topics liệt kê các repo cùng số sao và cùng ngôn ngữ để so sánh.
Đọc thêm về neoclide/coc.nvim ở đâu?
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/neoclide/coc.nvim là nguồn chính thức.
neoclide/coc.nvim có bao nhiêu sao?
neoclide/coc.nvim có 25.2k sao GitHub — tải lại trang để xem số mới nhất, hoặc xem trực tiếp github.com/neoclide/coc.nvim. TopGit phản chiếu số sao của GitHub nhưng không cam kết đến từng phút.
neoclide/coc.nvim có phải mã nguồn mở không?
TopGit chưa ghi nhận license cho neoclide/coc.nvim. Phần lớn repo public trên GitHub là mã nguồn mở, nhưng điều khoản khác nhau từng repo — mở file LICENSE để xác nhận.
neoclide/coc.nvim còn đang phát triển không?
Commit gần nhất trên neoclide/coc.nvim là 20 ngày trước (theo timestamp GitHub). Repo có 954 fork — một chỉ báo về mức độ quan tâm của cộng đồng.
neoclide/coc.nvim là gì?
neoclide/coc.nvim (neoclide/coc.nvim) là dự án TypeScript trên GitHub. Theo mô tả gốc: Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers.
neoclide/coc.nvim viết bằng ngôn ngữ gì?
neoclide/coc.nvim chủ yếu viết bằng TypeScript. Trường "language" của GitHub dựa trên phần lớn byte ở nhánh mặc định.
Đọc đầy đủ README ở tab phía trên.
Vẫn đang phân vân về coc.nvim?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về coc.nvim.