Git farkları için vimdiff, mevcut sürecin sekmesinde başlatılabilir mi?

Jan 20 2021

Diyelim ki açık bir dosya arabelleğim var ve :terminal1 sekme sayfasında açık bir bölme var. Çalıştırdığım vimdiffancak git diff'in göründüğü yeni bir sekme oluşturmak istiyorum . git difftool HEAD~1Mevcut vim sürecimde sadece başka bir sekme sayfasında görünmeye çalışıyorum .

Bu eklenti olmadan Vim 8'de mümkün mü?

Bunu yaptığımda :tab terminalve sonra koştuğumda bu illüzyona kapılıyorum git difftool HEAD~1. Ancak, bu bir vim alt işlemi başlatır ve bundan kaçınmak istiyorum.

Şöyle bir soru: İki split zaten açıkken vimdiff moduna nasıl girebilirim? ama git farklar için.

Yanıtlar

2 NikolasTapia Jan 20 2021 at 17:03

Bu kesinlikle vanilyada yapılabilirken vim, tpope'un mükemmel vim-fugitiveeklentisine bir göz atmanızı öneririm . Sonra, istediğinizi :tab Gdiffelde etmek için yapmanız yeterlidir .

Gerçekten herhangi bir eklenti kurmak istemiyorsanız, aşağıdakiler geçerli dosyanın arabellek no. 1:

  1. :tabnew | r! git show HEAD^:$(git rev-parse --show-prefix)#1:t
  2. Yeni açılan sekmede, :vert sb 1 | windo diffthis

Açıklama

  1. ilk olarak yeni bir sekme açar ve dosyanın sürümünün tabnewiçeriğini HEAD^arabellek 1'e yükler .
  2. 1 ile arabellek 1 içeren dikey bir bölme açar vert sb 1, ardından :diffthisfark moduna girmek için sekmedeki tüm arabelleklere yayınlar .

Düzenle

OP, 1. adımda daha fazla açıklama istedi . Çalışma ağacının köküne göre olması gereken yerde bir git showform girdisine ihtiyacı var. Örneğin, tampon 1'de dosyanın mutlak yol ise böylece sizin içeren (yani klasörü sizin repo köküdür), sırayla işe düzgün ile çağırmak zorunda kalacak . Ya kullanma veya olmaz işi. Bu yüzden kullanılan (olurdu git köküne geçerli klasör göreli yolunu elde etmek bu örnekte).<rev>:<path><path>/a/b/foo.extb.gitbgit showHEAD^:b/foo.e/a/b/foo.extfoo.extgit rev-parse --show-prefixb/

Ardından, vimdosyanın adını (yani foo.ext) eklemek için yol genişletmeyi kullandım . arabellek 1'e yüklenen dosyanın yolunu getirmeyi #1söyler vimve tarafından döndürülen yoldaki :tsondan sonraki her şey olan "kuyruğu" çıkarır . Bazı durumlarda ve eşittir, ancak bu her zaman böyle değildir. Kaçtın Örneğin, eğer o zaman döneceğini yerine ait . Daha fazla bilgi için göz atın ./#1#1#1:tvim b/foo.ext#1b/foo.extfoo.ext:help expand

Elbette, olduğu gibi yola manuel olarak girebilirsiniz :tabnew | r! git show HEAD^:b/foo.extve işe yarayacaktır. Ancak yukarıdaki sürüm komut dosyası oluşturabilir veya bir haritaya atayabilirsiniz.