2017-08-25 120 views
0

所以我一直在使用vim fugitive插件,我發現Glogcnext功能很棒,看看文件是如何隨時間變化的。使用cnext提交結賬文件

我想使用cnext命令從我提交的提交中檢出文件。是否有可能這樣做?

+2

打開修訂版,試試'Gwrite',如果這是你想要的,請報告 – Kent

+0

@當它打開'HEAD'時。 – sitilge

+0

如何詢問插件的作者? – romainl

回答

1

如果插件沒有提供相應的命令,希望這個功能有幫助。

當在文件提交日誌的quickfix窗口中按gc

autocmd FileType qf nnoremap<buffer> gc :call GitCheckoutFile()<cr> 

function! GitCheckoutFile() 
    let l = getline('.') 
    if match(l, '\vfugitive:\\\\') != -1 
     let path = substitute(l, '\v(fugitive:\\\\)|(\|.*)', '', 'g') 

     let commit_id = matchstr(path, '\v.git\\\\\zs\w*\ze\\') 
     let commit_info = matchstr(path, '\v.git\\\\\w*\\') 
     let file = substitute(path, escape(commit_info, '\'), '', 'g') 

     execute 'Git checkout '.commit_id.' -- '.file 
    endif 
endfunction 
+0

我認爲利用逃犯會更容易。通過'matchstr(fugitive#buffer()。rev(),'\ x \ {40}')'和文件路徑通過'fugitive @ buffer()。path()' –

+0

獲得一個緩衝區的修訂版本,槓桿逃犯。 – leaf

1

最簡單的方法是簡單地複製/抽出當前使用的緩衝區,然後用最近抽取的副本替換當前版本。

:%y|Gedit|%d_|put|0d_|w 

但是,如果你寧願做這個通過:Gread命令,你可以做到以下幾點:

:execute "Gedit|Gread! show " . matchstr(fugitive#buffer().rev(), '\x\{40}') . ":". fugitive#buffer().path() 

您可能需要包裝的這些高達一成的映射或命令,如果你經常這樣。

+0

這是一個更簡單的解決方案。 「shellescape」似乎對我的案例的最終命令產生了錯誤。和錯字:第二個'fugtive'。 – leaf

+0

@葉你是正確的。我已更新該帖子 –