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:
g:coc_git_status
.b:coc_git_status
.b:coc_git_blame
for statusline, and addGBlameToVirtualText
for inline blames.issues
, gfiles
, gstatus
, commits
, branches
& bcommits
<Plug>(coc-git-chunkinfo)
<Plug>(coc-git-nextchunk)
& <Plug>(coc-git-prevchunk)
,git.chunkInfo
git.chunkStage
git.chunkUndo
and more.Note for GitHub issues completion support:
GITHUB_API_TOKEN=xxx
needs to be set in env to fetch issues from private repositoriesNote for GitLab issues completion support:
v4
support, which availabled since GitLab 9.0GITLAB_PRIVATE_TOKEN=XXX
needs to be set in env, check Personal access tokenscoc-settings.json
, for example "git.gitlab.hosts": ["gitlab.example.com", "gitlab.com"]
git.command
: Command for git, could be absolute path of git executable., default: "git"
git.remoteName
: Remote name for fetch github issues., default: "origin"
git.diffOptions
: Options for git diff command, eg: ["--ignore-all-space"]
, default: []
git.foldContext
: Line count to leave below and above the fold, default: 0
.
git.browserRemoteName
: Remote name for browserOpen and copyUrl., default: ""
git.browserBranchName
: Branch name for browserOpen and copyUrl., default: ""
git.urlFix
: a object to configure the url style of copyUrl and browserOpen, make this two command support other git services like gitlab and gitea. default: {}
git.issueFormat
: Formatting string for issue completion. Supported interpolation variables: %i - issue id. %r - repository name. %o - organization/owner name. %t - issue title. %b - issue body. %c - issue created at. %a - issue author. %u - issue url., default: "#%i"
git.virtualTextPrefix
: Prefix of git blame infomation to virtual text, require virtual text feature of neovim., default: " "
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.branchCharacter
: Branch character used with g:coc_git_status, default: ""
git.changedDecorator
: Git changed decorator used with g:coc_git_status, default: "*"
git.conflictedDecorator
: Git conflicted decorator used with g:coc_git_status, default: "x"
git.stagedDecorator
: Git staged decorator used with g:coc_git_status, default: "●"
git.untrackedDecorator
: Git untracked decorator used with g:coc_git_status, default: "…"
git.enableGlobalStatus
: Enable global g:coc_git_status., default: true
git.enableGutters
: Enable gutters in sign column., default: true
git.realtimeGutters
: Update gutters in realtime, default: true., default: true
git.signPriority
: Priority of sign gutters, default to 10
.
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: "DiffChange"
git.semanticCommit.filetypes
: Enabled filetypes, default: ["gitcommit","gina-commit"]
git.semanticCommit.scope
: Commit message with scope field, default: true
git.splitWindowCommand
: Command used when split new window for show commit., default: "above sp"
git.showCommitInFloating
: Show commit in floating or popup window, default: false
git.floatConfig
: Configure style of float window/popup, extends from floatFactory.floatConfig
git.gitlab.hosts
: Custom GitLab hosts, default: ["gitlab.com"]
git.conflict.enabled
: Enable highlight conflict lines, default: true
git.conflict.current.hlGroup
: Highlight group for the current version of a merge conflict, default: "DiffChange"
git.conflict.incoming.hlGroup
: Highlight group for the incoming version of a merge conflict., default: "DiffAdd"
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",
When you have git.addGBlameToVirtualText
enabled, use command let g:coc_git_hide_blame_virtual_text = !get(g:, 'coc_git_hide_blame_virtual_text', 0)
to dynamic toggle virtual text.
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 : '' endfunction
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','')}
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) " navigate conflicts of current buffer nmap [c <Plug>(coc-git-prevconflict) nmap ]c <Plug>(coc-git-nextconflict) " 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.:CocCommand git.nextChunk
Navigate to the next chunk.:CocCommand git.prevChunk
Navigate to the previous chunk.:CocCommand git.chunkInfo
Show chunk info under cursor.:CocCommand git.chunkUndo
Undo current chunk.:CocCommand git.chunkStage
Stage current chunk.:CocCommand git.chunkUnstage
Unstage chunk that contains current line.: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:CocCommand git.foldUnchanged
Fold unchanged lines of current buffer.:CocCommand git.toggleGutters
Toggle git gutters in sign column.:CocCommand git.push
push code of current branch to remote.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
.
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
.
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/vim support virtual text by command :echo has('nvim-0.5.0') || has('patch-9.0.0067')
.
If you like my extension, consider supporting me on Patreon or PayPal:
MIT
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4