VIM'deki gibi ekrandaki kelimelerin tamamlanması (Bash veya Tmux)


10

Ekrandaki son eşleşen tanımlayıcıyı tamamlamak için Bash, Zsh veya Tmux'u nasıl yapılandırabilirim ? Bu ortak senaryoyu düşünün:

$ git fetch
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /opt/git/thunder
 * [new branch]      issue540   -> origin/issue547314
   e9204cf..4d42c3f  v2.1       -> origin/v2.1

Bash / Zsh / Tmux'un CLI'de issue547kolayca tamamlanmasını nasıl sağlayabilirim ? Git yardımcı bir şekilde tamamlandıktan Tabsonra düğmesine $ git checkout isbastığımda issue, ancak önceki tüm basamaklar aslında mevcut Git dallarıyla eşleştiğinden rakamları kendim tamamlamalıyım .

VIM'de, omnicomplete için Ctrl+ tuşuna basmak Pönceki eşleşme olarak tamamlanır, bu durumda issue547314aslında tamamlanır. Bu davranışı Bash, Zsh veya Tmux'ta nasıl alabilirim ?

Şu anda Ubuntu Sunucusunda (genellikle 12.04 LTS) Bash 4.2 ve Tmux 1.10 kullanıyorum. Gerekirse en son Ubuntu Sunucusu LTS'ye (14.04) güncelleme yapabilirim.

EDIT : kullanımı zor olmadığı sürece Bash, Zsh veya Tmux kullanan herhangi bir çözüm umursamıyorum. Yani Tabya da Ctrl+ Pya da başka bir kısayol iyi olurdu, ama Alt+ Meta+ Super+ Shift+ değil א.


Bunun bash kaynağının oldukça büyük bir revizyonunu alacağından eminim.
Kevin

@Kevin: Çok düşündüm, ama umarım ya şaşırtıcı zsh bunu halledebilir ya da belki de tmux.
dotancohen

Yanıtlar:


4

OP'nin aradığı bu özelliğin Emacs dünyasında dabbrev-expand olarak adlandırıldığını düşünüyorum :

Tamponun içinde o kısaltma ile başlayan kelimeleri (v-expand) arayarak arabellekteki sözcüğü dinamik bir kısaltma olarak genişletin.

xtermaynı zamanda bir dabbrev-expandözelliği var ama Emacs muadili biraz daha az akıllı ama benim için çok yararlı ve biri geçiş nedenlerinden biriydi xterm. İçinde xtermPencere bir özel belirtilen keybinding kullanabilirsiniz ~/.Xresourcesçağırmak için dabbrev-expandbelirli bir dizeye üzerinde. Örneğin, benim ~/.Xresources( uxtermxterm bir Unicode sürümünü kullanın ) benim aşağıdaki giriş var :

UXTerm*VT100.Translations: #override \n\
     Meta <Key>/:dabbrev-expand() \n\

xtermPencerenin içinde çağırmak için M-/( ALT + /) kullanabilirsiniz dabbrev-expand. xtermyazdığım harflerle başlayan ekranda görünen tüm dizeleri arayacaktır. Misal:

$ echo a_very_long_string bye by
$ a_v

Ben basarsa M-/şimdi xtermartıracağı a_viçin a_very_long_string. Ne yazık ki, dediğim gibi xtermçok akıllı değil ve dabbrev-expandözelliği sadece tam dizelerde çalışacak. Yani, senin durumunda ishaline getirilebileceğini issue540değil issue547314çünkü issue547314bir parçasıdır origin/issue547314(olarak düşünmek \ben düzenli ifadeler motorları her iki oluşumlarını yakalamak olsa da normal ifadelerde, biraz benzer issuedizeleri \bissue.+\b). Ancak , oryazıp ardından basabilirsiniz M-/. xtermİlk genişleyecektir oriçin origin/v2.1, bu basının bu yüzden istediğimiz değil M-/tekrar xtermonu genişleyecektir origin/issue547314. Şimdi, Bash kullanırsanız M-b,C-wve parçayı C-eçıkarmak için origin/. Özetle, dabbrev-expandiçeride xtermEmacs (ve sanırım Vim) kadar iyi değil ama yine de uzun dizeleri elle ve daha az yazım eğilimli yeniden yazmaktan daha hızlı. Ve çoğu durumda, gereksiz parçaları çıkarmaya gerek kalmadan doğrudan istenen dizeye genişleyecektir. Sadece buna alışmanız gerekir - imleçte olmasını istediğiniz dizeye bakın ve başka bir şeyden önce gelip gelmediğine bakın ve önceki bir parçayı yazıp genişletmeden sonra kaldırın.

Not xtermderlenmemektedir dabbrev-expandvarsayılan özellik ve siz özellikle etkinleştirmek zorunda. Bununla birlikte, xtermUbuntu depolarındaki sürümü derlenir dabbrev-expandve hemen kullanabilirsiniz.


Teşekkürler Arkadiusz, bu ihtiyacım olana yeterince yakın görünüyor. İşe yarayamayacağımı unutmayın! Belki benim xtermve uxtermdabbrev-expand için derlenmiş değil, ben özelliği hakkında hiçbir söz bulamadım -help. Derleme bayraklarını (gibi vim --version) nasıl görebilirim ? Ben de içinde yapılandırma satırı çalıştığını Not ~/.Xresourcesolarak Meta <KeyPress> /: dabbrev-expand() \n\ bulunduğu gibi burada ama bu da yardım etmedi.
dotancohen

Xterm'iniz dabbrev-expand olmadan derlenmiş olabilir. Xterm'i nasıl kurdunuz? ~ / .Xresources değiştirildikten sonra xrdb -merge .Xresourcesxterm içinde yapın.
Arkadiusz Drabczyk

Kesinlikle öyle yaptı Arkadiusz! Teşekkür ederim!
dotancohen

Ödül dönemi bitene kadar soruyu birkaç saat daha vereceğim, ama bir ayakkabı olduğundan eminim. Tek sorun korkunç xterm gereksinimidir! Ama şimdi özellik için doğru adı bildiğime göre diğer uygulamalar için google . Teşekkürler!
dotancohen

Teşekkürler Arkadiusz! Xterm çözümünü kullanmayacak olmama rağmen, beni kesinlikle doğru yöne doğrulttunuz. Görünüşe göre zshbu tesis var.
dotancohen

1

Bash bash tamamlama adı verilen benzer bir tesis olarak Bash. TabKomutları yazarken bağımsız değişkenler sağlarken tuşa basarak bunu kullanabilirsiniz .

Misal

Ben yazıp lssonra Tabiki kez vurmak başlarsanız, Bash kullanmak istediğiniz herhangi bir komut için eşleşen dosyaları (ve komut satırı anahtarları) bir listesini sağlamak için alırsınız:

$ ls <---- hit Tab x 2
Display all 232 possibilities? (y or n)

Ve işte anahtarlı örnek:

$ ls -- <---- hit Tab x 2
--all                 --format=                                  --quote-name
--almost-all          --group-directories-first
....
....

Kurmak?

Yüklemem zaten için bir kural içeriyordu git:

/etc/bash_completion.d/git

Bu dosyanın kurulumu, gitpaketi yüklediğimde yapıldı . Fedora 19'dayım, ancak diğer dağıtımlar da bunu yapıyor olmalı.

$ rpm -qf /etc/bash_completion.d/git
git-1.8.3.1-1.fc19.x86_64

Kurallar dosyasına bakıldığında, aşağıdaki durumlarda otomatik tamamlamayı kolaylaştıracağını açıklar:

# The contained completion routines provide support for completing:
#
#    *) local and remote branch names
#    *) local and remote tag names
#    *) .git/remotes file names
#    *) git 'subcommands'
#    *) tree paths within 'ref:path/to/file' expressions
#    *) file paths within current working directory and index
#    *) common --long-options
#

Yani bu sadece sizin için "işe yarar".


2
Bash tamamlama ve Git tamamlama çalışması (OP'de bahsettiğim gibi). Yapmak istediğim değişiklik, ilk Sekme'de ekranda gösterilen son yasal değere basmasını sağlamaktır. VIM Omnicompletion bu şekilde çalışır.
dotancohen

@dotancohen - Şimdi tarif ettiğim şeyin ötesinde mümkün olacağını görmüyorum.
slm

1

Extrakto ile böyle bir şey yapabilirsiniz :

  • prefix + tabextrakto'yu başlatmak için tmux tuşuna basın
  • bulanık metin / yol / url bul
  • basın
    • tab geçerli bölmeye eklemek için,
    • enter panoya kopyalamak için,
    • ctrl-o yolu / url'yi açmak veya
    • ctrl-e ile düzenlemek $EDITOR
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.