所以我一直在使用vim fugitive
插件,我发现Glog
和cnext
功能很棒,可以看到文件随着时间的推移是如何变化的。
我想从使用该cnext
命令导航到的提交中签出文件。有可能这样做吗?
所以我一直在使用vim fugitive
插件,我发现Glog
和cnext
功能很棒,可以看到文件随着时间的推移是如何变化的。
我想从使用该cnext
命令导航到的提交中签出文件。有可能这样做吗?
如果插件没有提供相应的命令,希望这个功能有所帮助。
gc
在quickfix
文件提交日志窗口中按下。
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
最简单的方法是简单地复制/拉出您当前所在的缓冲区,然后用这个最近拉出的副本替换当前版本。
:%y|Gedit|%d_|put|0d_|w
但是,如果您更愿意通过:Gread
命令执行此操作,则可以执行以下操作:
:execute "Gedit|Gread! show " . matchstr(fugitive#buffer().rev(), '\x\{40}') . ":". fugitive#buffer().path()
如果您经常这样做,您可能希望将其中一个包装到映射或命令中。