Bash tamamlama kuralları korunacak şekilde 'git' ile 'g' diğer adı nasıl korunur?


25

Bunu yaparsam:

alias g='git'

Tüm tamamlama kurallarını kaybediyorum (örneğin, şubeler ve uzaktan kumandalar, örneğin TAB’dan sonra TAB’a girdiğimde artık otomatik olarak tamamlanmıyor g push o).


Sana bir cevabım olmasa da, bir dakikanızı ayırıp, diğer iki harfe yazmamanın size gerçekten bir avantaj sağlayıp sağlamadığını merak ediyorum.
Marco Ceppi

4
Elbette öyle! Günde 100 defadan fazla 'g' yazıyorum.
Paweł Gościcki 19:11

3
Sık kullanılan kısa komutları daha kısa takma adlara bile takma olarak kullanmak, bana yüzlerce tuş basımından tasarruf etmemi sağlıyor. Kabuk geçmişime göre, takma adı g=gitgeçen ay 756 kez kullandım , yani 'g' ve 'i' tuşlarına basarak toplam 1512 kez tasarruf ettim. Bu, git takma adlarımla birleştiğimde, muhtemelen bana ayda on binlerce tuş basmamı sağlıyor.

Tuş vuruşlarını kısaltmanın ana noktası, ellerinizin beyninize ayak uydurmasına yardımcı olmaktır.
Tyler Collier

Superuser.com/questions/436314/… adresindeki komut dosyası çok iyi çalıştı, sanırım bir anıyı hak ediyor.
brandizzi

Yanıtlar:


21

Şunu /etc/bash_completion.d/gitkolayca kopyalayıp değiştirerek , aşağıdaki satırları kendinize ekleyin ~/.bashrc:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g

Ha! WunderBar! Olması gerektiği gibi çalışır :)
Paweł Gościcki

1
Ayrıca source /usr/share/bash-completion/completions/gitbenim .bashrc
pcx'e

.bashrcBuradaki kodun işe yarayıp yaramadığından emin değilim , ancak bu cevap kesinlikle güncel değil. /etc/bash_completion.d/git14.04'te var görünmüyor. Bkz lzap cevabını aşağıda.
Max Wallace 18

18

Son bash-tamamlama yukarı yönde hareket etti ve işleri biraz yeniden adlandırdı. Kar:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

Bunu karşılaştığınızda Ubuntu'nun son sürümlerinde (örneğin 14.04, ayrıca Fedora 22+) kullanın:

completion: function `_git' not found

tamamlama sırasında


2
Görünüşe göre buradaki tek doğru cevap bu.
pjvandehaar

Kullanım __git_complete gc _git_checkout(veya benzeri) daha özgül takma adları için tamamlamaları kurmak. /usr/.../gitDoğru adı bulmak için yukarıdaki gibi arama yapın .
Max Wallace

1
@MaxWallace - .gitconfig içindeki belirli git yöntemleri için takma adları ayarladığınızda (örn. Gc = checkout), bunların tamamlanmasını açıkça yapılandırmaya gerek yoktur.
Piotr Aleksander Chmielowski

1
@PiotrAleksanderChmielowski Teşekkürler! Ama üst düzey bash takma adları için bu işleri (örneğin sanmıyorum gc=> git checkoutaliasing aksine) ciçin checkoutiçinde gitve söyleyerek git c. Yanlışsam düzelt.
Max Wallace

@MaxWallace Evet, haklısın, benim hatam;)
Piotr Aleksander Chmielowski


2

İlk önce orijinal tamamlama komutuna bakın. Örnek:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

Şimdi bunları başlangıç ​​kodunuza ekleyin (örn. ~ / .Bashrc):

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

_completion_loaderÇizgi gerekmeyebilir. Ancak bazı durumlarda, tamamlama işlevi yalnızca komutu yazıp TABilk kez bastıktan sonra dinamik olarak yüklenir . Öyleyse, orijinal komutu kullanmadıysanız ve diğer adı + denerseniz, TAB"bash: finish: function not found" gibi bir hata alabilirsiniz.


Harika çalışıyor. Benim için doğru cevap bu, tamamlamadaki grep komutu kullanışlıdır. Tamamlayıcı yükleyiciye gerek yoktu.
Paul Carlton

1

Bunu yapmanın güncellenmiş yolu (tam benim için işe yaramaz):

  1. cd - ana dizininize geçme
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Ekle source ~/git-completion.bashsizin Bashrc dosyaya (evinizdeki klasöründe bu dosya yapmak tane yoksa, Bash otomatik olarak arayacaktır)
  4. Ekle alias g='git'.bashrc dosyasına.
  5. Yeni bir oturum başlat veya değişikliklerini kaynakla source ~/.bashrc

2
Bağlantılı olduğunuz yorumda gerçekte tamamlandıkları kısmı __git_complete g _git
atladınız

0

Sadece tamlık adına, ~/.bash-completionbash tamamlama betiğinin sonunda kaynaklanan dosyayı kullanarak bir cevap eklemek istiyorum :

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete gd _git_diff
_xfunc git __git_complete gb _git_branch

O zaman ~/.bashrcbende sadece takma isimler var. Deniyordum:

  • ~/.bashrcbash-tamamlama materyalleriyle nesneyi kirletmekten kaçının (ait olduğu şeyleri saklayın) ✓
  • Git-tamamlamanın tamamını kabuğuma sokmamak

Ne yazık ki _xfunckaynakları yine de git-tamamlama kaynakları. Ben düzgün (Ben de lunchpad üzerinde sorulan nasıl anlamaya kez bu cevabı güncelleriz burada ).


-1

Buraya bakın: https://gist.github.com/scue/576310b7c6b7714aad05

wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc

Tadını çıkarın! (^ O ^) /


1
Üzgünüm, ama bu tamamen farklı bir şey. Bütün komutlar için bu kadar basit takma adlar kullanmak önemsizdir.
Paweł Gościcki

Onları Oh-My- Zsh’ın
scue

-1

Takma adları her zamanki gibi tanımlayabilirsiniz:

alias g='git'

Ardından bash tamamlamanın diğer adı fark etmesini sağlamak için complete alias'ı kurun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.