Git farkları için vimdiff, mevcut sürecin sekmesinde başlatılabilir mi?
Diyelim ki açık bir dosya arabelleğim var ve :terminal
1 sekme sayfasında açık bir bölme var. Çalıştırdığım vimdiff
ancak git diff'in göründüğü yeni bir sekme oluşturmak istiyorum . git difftool HEAD~1
Mevcut 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 terminal
ve 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
Bu kesinlikle vanilyada yapılabilirken vim
, tpope'un mükemmel vim-fugitiveeklentisine bir göz atmanızı öneririm . Sonra, istediğinizi :tab Gdiff
elde etmek için yapmanız yeterlidir .
Gerçekten herhangi bir eklenti kurmak istemiyorsanız, aşağıdakiler geçerli dosyanın arabellek no. 1:
:tabnew | r! git show HEAD^:$(git rev-parse --show-prefix)#1:t
- Yeni açılan sekmede,
:vert sb 1 | windo diffthis
Açıklama
- ilk olarak yeni bir sekme açar ve dosyanın sürümünün
tabnew
içeriğiniHEAD^
arabellek 1'e yükler . - 1 ile arabellek 1 içeren dikey bir bölme açar
vert sb 1
, ardından:diffthis
fark 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 show
form 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.ext
b
.git
b
git show
HEAD^:b/foo.e
/a/b/foo.ext
foo.ext
git rev-parse --show-prefix
b/
Ardından, vim
dosyanın adını (yani foo.ext
) eklemek için yol genişletmeyi kullandım . arabellek 1'e yüklenen dosyanın yolunu getirmeyi #1
söyler vim
ve tarafından döndürülen yoldaki :t
sondan 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:t
vim b/foo.ext
#1
b/foo.ext
foo.ext
:help expand
Elbette, olduğu gibi yola manuel olarak girebilirsiniz :tabnew | r! git show HEAD^:b/foo.ext
ve işe yarayacaktır. Ancak yukarıdaki sürüm komut dosyası oluşturabilir veya bir haritaya atayabilirsiniz.