" Primary functions {{{function! gitgutter#all(force) abortlet visible = tabpagebuflist()for bufnr in range(1, bufnr('$') + 1)if buflisted(bufnr)let file = expand('#'.bufnr.':p')if !empty(file)if index(visible, bufnr) != -1call gitgutter#process_buffer(bufnr, a:force)elseif a:forcecall s:reset_tick(bufnr)endifendifendifendforendfunctionfunction! gitgutter#process_buffer(bufnr, force) abort" NOTE a:bufnr is not necessarily the current buffer.if gitgutter#utility#is_active(a:bufnr)if has('patch-7.4.1559')let l:Callback = function('gitgutter#process_buffer', [a:bufnr, a:force])elselet l:Callback = {'function': 'gitgutter#process_buffer', 'arguments': [a:bufnr, a:force]}endiflet how = s:setup_path(a:bufnr, l:Callback)if [how] == ['async'] " avoid string-to-number conversion if how is a numberreturnendifif a:force || s:has_fresh_changes(a:bufnr)let diff = 'NOT SET'trylet diff = gitgutter#diff#run_diff(a:bufnr, g:gitgutter_diff_relative_to, 0)catch /gitgutter not tracked/call gitgutter#debug#log('Not tracked: '.gitgutter#utility#file(a:bufnr))catch /gitgutter diff failed/call gitgutter#debug#log('Diff failed: '.gitgutter#utility#file(a:bufnr))call gitgutter#hunk#reset(a:bufnr)endtryif diff != 'async' && diff != 'NOT SET'call gitgutter#diff#handler(a:bufnr, diff)endifendifendifendfunctionfunction! gitgutter#disable() abort" get list of all buffers (across all tabs)for bufnr in range(1, bufnr('$') + 1)if buflisted(bufnr)let file = expand('#'.bufnr.':p')if !empty(file)call s:clear(bufnr)endifendifendforlet g:gitgutter_enabled = 0endfunctionfunction! gitgutter#enable() abortlet g:gitgutter_enabled = 1call gitgutter#all(1)endfunctionfunction! gitgutter#toggle() abortif g:gitgutter_enabledcall gitgutter#disable()elsecall gitgutter#enable()endifendfunctionfunction! gitgutter#buffer_disable() abortlet bufnr = bufnr('')call gitgutter#utility#setbufvar(bufnr, 'enabled', 0)call s:clear(bufnr)endfunctionfunction! gitgutter#buffer_enable() abortlet bufnr = bufnr('')call gitgutter#utility#setbufvar(bufnr, 'enabled', 1)call gitgutter#process_buffer(bufnr, 1)endfunctionfunction! gitgutter#buffer_toggle() abortif gitgutter#utility#getbufvar(bufnr(''), 'enabled', 1)call gitgutter#buffer_disable()elsecall gitgutter#buffer_enable()endifendfunction" }}}function! gitgutter#setup_maps()if !g:gitgutter_map_keysreturnendif" Note hasmapto() and maparg() operate on the current buffer.let bufnr = bufnr('')if gitgutter#utility#getbufvar(bufnr, 'mapped', 0)returnendifif !hasmapto('<Plug>(GitGutterPrevHunk)') && maparg('[c', 'n') ==# ''nmap <buffer> [c <Plug>(GitGutterPrevHunk)endifif !hasmapto('<Plug>(GitGutterNextHunk)') && maparg(']c', 'n') ==# ''nmap <buffer> ]c <Plug>(GitGutterNextHunk)endifif !hasmapto('<Plug>(GitGutterStageHunk)', 'v') && maparg('<Leader>hs', 'x') ==# ''xmap <buffer> <Leader>hs <Plug>(GitGutterStageHunk)endifif !hasmapto('<Plug>(GitGutterStageHunk)', 'n') && maparg('<Leader>hs', 'n') ==# ''nmap <buffer> <Leader>hs <Plug>(GitGutterStageHunk)endifif !hasmapto('<Plug>(GitGutterUndoHunk)') && maparg('<Leader>hu', 'n') ==# ''nmap <buffer> <Leader>hu <Plug>(GitGutterUndoHunk)endifif !hasmapto('<Plug>(GitGutterPreviewHunk)') && maparg('<Leader>hp', 'n') ==# ''nmap <buffer> <Leader>hp <Plug>(GitGutterPreviewHunk)endifif !hasmapto('<Plug>(GitGutterTextObjectInnerPending)') && maparg('ic', 'o') ==# ''omap <buffer> ic <Plug>(GitGutterTextObjectInnerPending)endifif !hasmapto('<Plug>(GitGutterTextObjectOuterPending)') && maparg('ac', 'o') ==# ''omap <buffer> ac <Plug>(GitGutterTextObjectOuterPending)endifif !hasmapto('<Plug>(GitGutterTextObjectInnerVisual)') && maparg('ic', 'x') ==# ''xmap <buffer> ic <Plug>(GitGutterTextObjectInnerVisual)endifif !hasmapto('<Plug>(GitGutterTextObjectOuterVisual)') && maparg('ac', 'x') ==# ''xmap <buffer> ac <Plug>(GitGutterTextObjectOuterVisual)endifcall gitgutter#utility#setbufvar(bufnr, 'mapped', 1)endfunctionfunction! s:setup_path(bufnr, continuation)if gitgutter#utility#has_repo_path(a:bufnr) | return | endifreturn gitgutter#utility#set_repo_path(a:bufnr, a:continuation)endfunctionfunction! s:has_fresh_changes(bufnr) abortreturn getbufvar(a:bufnr, 'changedtick') != gitgutter#utility#getbufvar(a:bufnr, 'tick')endfunctionfunction! s:reset_tick(bufnr) abortcall gitgutter#utility#setbufvar(a:bufnr, 'tick', 0)endfunctionfunction! s:clear(bufnr)call gitgutter#sign#clear_signs(a:bufnr)call gitgutter#hunk#reset(a:bufnr)call s:reset_tick(a:bufnr)call gitgutter#utility#setbufvar(a:bufnr, 'path', '')endfunction" Note:" - this runs synchronously" - it ignores unsaved changes in buffers" - it does not change to the repo rootfunction! gitgutter#quickfix()let cmd = g:gitgutter_git_executable.' '.g:gitgutter_git_args.' rev-parse --show-cdup'let path_to_repo = get(systemlist(cmd), 0, '')if !empty(path_to_repo) && path_to_repo[-1:] != '/'let path_to_repo .= '/'endiflet locations = []let cmd = g:gitgutter_git_executable.' '.g:gitgutter_git_args.' --no-pager'.\ ' diff --no-ext-diff --no-color -U0'.\ ' --src-prefix=a/'.path_to_repo.' --dst-prefix=b/'.path_to_repo.' '.\ g:gitgutter_diff_args. ' '. g:gitgutter_diff_baselet diff = systemlist(cmd)let lnum = 0for line in diffif line =~ '^diff --git [^"]'let paths = line[11:]let mid = (len(paths) - 1) / 2let [fnamel, fnamer] = [paths[:mid-1], paths[mid+1:]]let fname = fnamel ==# fnamer ? fnamel : fnamel[2:]elseif line =~ '^diff --git "'let [_, fnamel, _, fnamer] = split(line, '"')let fname = fnamel ==# fnamer ? fnamel : fnamel[2:]elseif line =~ '^@@'let lnum = matchlist(line, '+\(\d\+\)')[1]elseif lnum > 0call add(locations, {'filename': fname, 'lnum': lnum, 'text': line})let lnum = 0endifendforif !g:gitgutter_use_location_listcall setqflist(locations)elsecall setloclist(0, locations)endifendfunction
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。