2017-08-25 1 views
0

Donc j'ai utilisé vim fugitive plugin et je trouve la fonctionnalité Glog et cnext super pour voir comment le fichier a changé au fil du temps.Checkout fichier de la validation en utilisant cnext

Je voudrais extraire le fichier du commit que j'ai navigué à l'aide de la commande cnext. Est-il possible de le faire?

+2

avec la révision ouverte, essayez 'Gwrite', s'il vous plaît signaler si c'est ce que vous voulez – Kent

+0

@Kent il ouvre le' HEAD'. – sitilge

+0

Pourquoi ne pas demander à l'auteur du plugin? – romainl

Répondre

1

Si le plug-in ne fournit pas de commande correspondante, j'espère que cette fonction sera utile.

Appuyez sur gc dans la fenêtre quickfix des fichiers journaux de validation de fichier.

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

Je pense qu'il serait plus facile de tirer parti des fugitifs. Obtenir une révision du tampon via 'matchstr (fugitive # buffer(). Rev(), '\ x \ {40}')' et le chemin du fichier via fugitive @ buffer(). Path() ' –

+0

Année, Il est préférable de tirer parti de fugitif. – leaf

1

La façon la plus simple est de simplement copier/Yank le tampon que vous êtes actuellement et remplacer la version actuelle avec cette copie récemment yanked.

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

Toutefois, si vous préférez faire cela via :Gread commandes vous pouvez effectuer les opérations suivantes:

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

Vous pouvez vouloir envelopper un de ces en une cartographie ou une commande si vous le faites souvent.

+0

C'est une solution beaucoup plus simple. 'shellescape' semble caser l'erreur à la commande finale pour mon cas. Et typo: le second 'fugitif'. – leaf

+0

@leaf vous avez raison. J'ai mis à jour le post –