使用cnext从提交中签出文件

时间:2017-08-25 12:09:14

标签: git vim vim-fugitive

所以我一直在使用vim fugitive插件,我发现Glogcnext功能很棒,可以看到文件随时间的变化情况。

我想从使用cnext命令导航到的提交中签出文件。是否可以这样做?

2 个答案:

答案 0 :(得分:1)

如果插件没有提供相应的命令,希望此功能有帮助。

在文件提交日志的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

答案 1 :(得分:1)

最简单的方法是简单地复制/抽取当前打开的缓冲区,然后用最近被淘汰的副本替换当前版本。

/^(-.*\n)\n+(?=-)/gm

但是,如果您希望通过:%y|Gedit|%d_|put|0d_|w 命令执行此操作,则可以执行以下操作:

:Gread

如果经常这样做,您可能希望将其中一个包装到映射或命令中。