Ⅰ. 插件描述

Git integration of coc.nvim

Ⅱ. 基本信息

创建日期:  2019-04-27
使用用户:  9
Github星:  122
插件作者:  neoclide

Ⅲ. 安装方法


Plugin 'neoclide/coc-git'
… 然后在Vim中运行以下命令:
:source %

对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。


NeoBundle 'neoclide/coc-git'
… 然后在Vim中运行以下命令:
:source %


Plug 'neoclide/coc-git'
… 然后在Vim中运行以下命令:
:source %


cd ~/.vim/bundle
git clone

Ⅳ. 文档说明

# coc-git

Git integration of coc.nvim.

Note: many useful features not implemented, it's recommended to
use plugin like vim-fugitive at the
same time.


In your vim/neovim, run command:

:CocInstall coc-git


  • Always async.
  • Always refresh on TextChange.
  • Powerful list support.
  • Semantic commit and github issues completion support.


  • Sign support for git status of current buffer.
  • Git status of current project, by g:coc_git_status.
  • Git status of current buffer, byb:coc_git_status.
  • Git status of current line, byb:coc_git_blame. used for statusline.
  • Git related lists, including issues, gfiles, gstatus, commits, branches & bcommits
  • Keymaps for git chunks, including <Plug>(coc-git-chunkinfo) <Plug>(coc-git-nextchunk) & <Plug>(coc-git-prevchunk) ,
  • Commands for chunks, including git.chunkInfo git.chunkStage git.chunkUndo and more.
  • Completion support for semantic commit.
  • Completion support for GitHub/GitLab issues.

Note for GitLab issues completion support:

  • current only API v4 support, which availabled since GitLab 9.0
  • GITLAB_PRIVATE_TOKEN=XXX needs to be set in env, check Personal access tokens
  • GitLab host needs to be set in coc-settings.json, for example "git.gitlab.hosts": ["", ""]


  • git.enableGlobalStatus: Enable global g:coc_git_status, default: true.
  • git.command: Command for git, could be absolute path of git executable, default: "git".
  • git.branchCharacter: Branch character used with g:coc_git_branch, default: "".
  • git.remoteName: Remote name used for fetch github issues, default: origin.
  • git.enableGutters: Enable gutters in sign column., default: true.
  • git.realtimeGutters: Change to false when you want gutters update only on save, default: true.
  • git.signOffset: Start offset of sign gutter, change to higher value to prevent overwrite by other plugin., default: 99.
  • git.changedSign.text: Text of changed sign., default: "~".
  • git.changedSign.hlGroup: Highlight group for changed sign., default: "DiffChange".
  • git.addedSign.text: Text of added sign., default: "+".
  • git.addedSign.hlGroup: Highlight group for added sign., default: "DiffAdd".
  • git.removedSign.text: Text of removed sign., default: "_".
  • git.removedSign.hlGroup: Highlight group for removed sign., default: "DiffDelete".
  • git.topRemovedSign.text: Text of top removed sign., default: "‾".
  • git.topRemovedSign.hlGroup: Highlight group for top removed sign., default: "DiffDelete".
  • git.changeRemovedSign.text: Text of change removed sign., default: "≃".
  • git.changeRemovedSign.hlGroup: Highlight group for change removed sign., default: "DiffDelete".
  • git.virtualTextPrefix: Prefix of git blame information to virtual text, require virtual text feature of neovim. default: 5 <Space>.
  • git.addGBlameToVirtualText: Add git blame information to virtual text, require virtual text feature of neovim. default: false.
  • git.addGBlameToBufferVar: Add git blame information to b:coc_git_blame. default: false.
  • git.semanticCommit.filetypes: filetype list to enable semantic commit completion, default: ["gitcommit", "gina-commit"]
  • git.gitlab.hosts: Custom GitLab host list, defaults: ['']
  • coc.source.issues.enable: enable issues completion from github, default true.
  • coc.source.issues.priority: priority of issues source, default: 9.
  • coc.source.issues.shortcut: shortcut of issues source, default: "I".
  • coc.source.issues.filetypes: filetype list to enable issues source, default: ["gitcommit", "gina-commit"]

more information, see package.json

Note for user from vim-gitgutter,
if your have highlight groups defined for vim-gitgutter, you can use:

"git.addedSign.hlGroup": "GitGutterAdd",
"git.changedSign.hlGroup": "GitGutterChange",
"git.removedSign.hlGroup": "GitGutterDelete",
"git.topRemovedSign.hlGroup": "GitGutterDelete",
"git.changeRemovedSign.hlGroup": "GitGutterChangeDelete",


Statusline integration

  • g:coc_git_status including git branch and current project status.
  • b:coc_git_status including changed lines of current buffer.
  • b:coc_git_blame including blame info of current line.

Example for lightline user:

" lightline
let g:lightline = {
  \ 'active': {
  \   'left': [
  \     [ 'mode', 'paste' ],
  \     [ 'ctrlpmark', 'git', 'diagnostic', 'cocstatus', 'filename', 'method' ]
  \   ],
  \   'right':[
  \     [ 'filetype', 'fileencoding', 'lineinfo', 'percent' ],
  \     [ 'blame' ]
  \   ],
  \ },
  \ 'component_function': {
  \   'blame': 'LightlineGitBlame',
  \ }
\ }

function! LightlineGitBlame() abort
  let blame = get(b:, 'coc_git_blame', '')
  " return blame
  return winwidth(0) > 120 ? blame : ''

If you're not using statusline plugin, you can add them to statusline by:

set statusline^=%{get(g:,'coc_git_status','')}%{get(b:,'coc_git_status','')}%{get(b:,'coc_git_blame','')}

User autocmd

autocmd User CocGitStatusChange {command}

Triggered after the g:coc_git_status b:coc_git_status b:coc_git_blame has changed.

Could be used for update the statusline.


Create keymappings like:

" navigate chunks of current buffer
nmap [g <Plug>(coc-git-prevchunk)
nmap ]g <Plug>(coc-git-nextchunk)
" show chunk diff at current position
nmap gs <Plug>(coc-git-chunkinfo)
" show commit contains current position
nmap gc <Plug>(coc-git-commit)
" create text object for git chunks
omap ig <Plug>(coc-git-chunk-inner)
xmap ig <Plug>(coc-git-chunk-inner)
omap ag <Plug>(coc-git-chunk-outer)
xmap ag <Plug>(coc-git-chunk-outer)


Use command :CocCommand to open commands and type git. to get all git
related commands.

  • :CocCommand git.copyUrl Copy url of current line to clipboard, github url supported.
  • :CocCommand git.chunkInfo Show chunk info under cursor.
  • :CocCommand git.chunkUndo Undo current chunk.
  • :CocCommand git.chunkStage Stage current chunk.
  • :CocCommand git.diffCached Show cached diff in preview window.
  • :CocCommand git.showCommit Show commit of current chunk.
  • :CocCommand git.browserOpen Open current line in browser, github url supported.
  • :CocCommand git.foldUnchanged Fold unchanged lines of current buffer.
  • :CocCommand git.toggleGutters Toggle git gutters in sign column.

Work with git lists

To open a specified coc list, you have different ways:

  • Run :CocList and select the list by <CR>.
  • Run :CocList and type name of list for completion.
  • Create keymap for open specified list with list options, like:

    nnoremap <silent> <space>g  :<C-u>CocList --normal gstatus<CR>

To toggle list mode, use <C-o> and i.

To move up&down on insertmode, use <C-j> and <C-k>

To run a action, press <tab> and select the action.

For more advance usage, checkout :h coc-list.

Issue autocomplete from multiple GitHub repositories

To enable autocompletion of issues from multiple GitHub repositories, put a comma-separated list of issue repository specifiers in the git config variable coc-git.issuesources.
An issue repository specifier looks like this: github/neoclide/coc-git.

  • The first part specifies the issue provider, currently only "github" is supported
  • The second part specifies the organization or owner of the repository
  • The third part specifies the repository name

Multiple repositories can be specified using comma separation, like this: github/neoclide/coc-git,github/neoclide/coc.nvim


Q: Virtual text not working.

A: Make sure your neovim support virtual text by command :echo exists('*nvim_buf_set_virtual_text').