From 10121f34f29afb28c3e1d3ac3df34026fe992f21 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Sat, 13 Mar 2021 23:27:28 -0500 Subject: [PATCH] Remove Git dir checks on FileType events In order for these checks to work, :filetype on must be invoked *after* Fugitive is loaded. Otherwise, the FileType event triggers before FugitiveDetect() is called. These file types are used almost exclusively inside of Git repositories, and in the rare case they are not, we're not doing anything particularly intrusive, so dropping the conditional should have little practical impact. An exception is fugitive#MapJumps(), which is designed to be used exclusively with historical buffers, the status buffer, and captured :Git output, so let's lock it down to those particular workflows. --- autoload/fugitive.vim | 14 +++++++++++++- plugin/fugitive.vim | 21 +++++++-------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index 5eb0920..b6cccda 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -2273,7 +2273,10 @@ function! s:TempReadPost(file) abort if has_key(s:temp_files, s:cpath(a:file)) let dict = s:temp_files[s:cpath(a:file)] setlocal nobuflisted - if has_key(dict, 'filetype') && dict.filetype !=# &l:filetype + if get(dict, 'filetype', '') ==# 'git' + call fugitive#MapJumps() + endif + if has_key(dict, 'filetype') let &l:filetype = dict.filetype endif setlocal foldmarker=<<<<<<<,>>>>>>> @@ -6117,6 +6120,9 @@ endfunction function! s:StatusCfile(...) abort let tree = s:Tree() + if empty(tree) + return [''] + endif let lead = s:cpath(tree, getcwd()) ? './' : tree . '/' let info = s:StageInfo() let line = getline('.') @@ -6146,6 +6152,9 @@ endfunction function! s:MessageCfile(...) abort let tree = s:Tree() + if empty(tree) + return '' + endif let lead = s:cpath(tree, getcwd()) ? './' : tree . '/' if getline('.') =~# '^.\=\trenamed:.* -> ' return lead . matchstr(getline('.'),' -> \zs.*') @@ -6172,6 +6181,9 @@ function! fugitive#MessageCfile() abort endfunction function! s:cfile() abort + if empty(FugitiveGitDir()) + return [] + endif try let myhash = s:DirRev(@%)[1] if len(myhash) diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim index 4fc5906..5fedf49 100644 --- a/plugin/fugitive.vim +++ b/plugin/fugitive.vim @@ -363,27 +363,20 @@ augroup fugitive autocmd FileType netrw call FugitiveDetect(fnamemodify(get(b:, 'netrw_curdir', expand('')), ':p')) autocmd FileType git - \ if len(FugitiveGitDir()) | - \ call fugitive#MapJumps() | - \ call fugitive#MapCfile() | - \ endif + \ call fugitive#MapCfile() autocmd FileType gitcommit - \ if len(FugitiveGitDir()) | - \ call fugitive#MapCfile('fugitive#MessageCfile()') | - \ endif + \ call fugitive#MapCfile('fugitive#MessageCfile()') autocmd FileType git,gitcommit - \ if len(FugitiveGitDir()) && &foldtext ==# 'foldtext()' | + \ if &foldtext ==# 'foldtext()' | \ setlocal foldtext=fugitive#Foldtext() | \ endif autocmd FileType fugitive - \ if len(FugitiveGitDir()) | - \ call fugitive#MapCfile('fugitive#StatusCfile()') | - \ endif + \ call fugitive#MapCfile('fugitive#StatusCfile()') autocmd FileType gitrebase \ let &l:include = '^\%(pick\|squash\|edit\|reword\|fixup\|drop\|[pserfd]\)\>' | - \ if len(FugitiveGitDir()) | - \ let &l:includeexpr = 'v:fname =~# ''^\x\{4,\}$'' ? FugitiveFind(v:fname) : ' . - \ (len(&l:includeexpr) ? &l:includeexpr : 'v:fname') | + \ if &l:includeexpr !~# 'Fugitive' | + \ let &l:includeexpr = 'v:fname =~# ''^\x\{4,\}$'' && len(FugitiveGitDir()) ? FugitiveFind(v:fname) : ' . + \ (len(&l:includeexpr) ? &l:includeexpr : 'v:fname') | \ endif | \ let b:undo_ftplugin = get(b:, 'undo_ftplugin', 'exe') . '|setl inex= inc='