Sık kullanılan komut satırı komutları için otomatik tamamlama?


15

Bazı projeler için genellikle birkaç komut yazarım, örneğin:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

ve

./runmyproject --with some --command line --options set

Oldukça tembel olduğumu görünce, bu komutları tekrar tekrar yazmamaya çalışıyorum. Bu yüzden elbette bu komutları bulmak için yukarı tuşunu çok kullanabilirim, ancak çoğu zaman aralarında o kadar çok komut var ki, onu aramak sadece yazmaktan daha fazla zaman alıyor.

Şimdi, henüz hepsini yazmadım, çok kullandığım tam bir komut önerebilen bir tür yardımcı program olup olmadığını merak ediyorum. Böylece örneğin 'cd an /' yazabilirim ve zaten yolun geri kalanını önerdiğinden, geçen ay bu kadar çok kullandım.

Bash Smart Complete adlı bir şey buldum. Ama bu biraz "aptal" çünkü daha önce kullandığım komutlara bakmıyor. Ben de bir dosyada çok kullandığım komutları koyarak düşündüren bu SO yanıtı bulundu . Ancak, her yeni proje başlattığımda veya klasörleri veya program argümanlarını değiştirdiğimde bunun için yeni bir dosya oluşturmam gerekeceği için yeterince duyarlı değil.

Bunu başarmak için başka bir yardımcı program veya başka bir yol bilen var mı? Veya geçen ay kullandığım komutlara bakabilmek ve geçen ay en çok kullanılan ve en çok kullanılan komutu tamamlayabilmek için Bash Smart Complete'i nasıl değiştirebileceğimi bilen var mı?

[EDIT] Aşağıda gerçekten harika cevaplar var. Henüz kesin bir cevap olarak işaretlemedim. Cevapları sevmediğim için değil, ama hiçbiri mutlak bir kazanan olmadığı için değil. Bence Finalter harika bir proje. Ne yazık ki kenarlarda hala pürüzlü. Örneğin; henüz kopyala-yapıştır özelliğini desteklemiyor. Yine de bu projeye göz kulak olurdum çünkü olgunlaştığında harika bir terminal uygulaması olacağını düşünüyorum. Diğer cevaplara gelince; ya bir takma ad oluşturmayı önerdiler. Birkaç kişi Ctrl + R kullanmanızı önerdi, bu yüzden bir yanıtı gerçekten diğerine vurgulayamıyorum.

Şimdilik kesinlikle Ctrl + R kullanıyorum ve gelecekte Finalterm'i kullanabilirim.

Tüm harika cevaplar için teşekkürler çocuklar!


2
Gerçekten denemelisin zsh. İstediğiniz her şeyi ve daha fazlasını sunar. Bash zsh taşıma
Basharat Sialvi

BASH kılavuz sayfasına göre, işlev BASH'de "dinamik tam tarih" olarak da bulunur. Varsayılan olarak işe yaramaz hale getirmek için Alt + Tab'a bağlıdır, ancak bağlayıcı "bind" ile değiştirilebilir.
Boris Bukh

1
@BasharatSial zsh bu konuda yardımcı olmak için özellikle ne yapar?
poolie

Yanıtlar:


16

Komutlar sıklıkla kullanılıyorsa, bash'ın izlediği komut geçmişine kaydedilir .bash_history.

Şimdi hile: CTRL-r tuşlarına basarak komutları yeniden çalıştırmak için bu geçmişi tersine çevirebilirsiniz .

Ters geçmiş arama modunda bash, siz yazdıkça , geçmişte verdiğiniz girişle başlayan en son komutu gösterir. Ardından önerilen komutu kabul etmek ve yürütmek için enter tuşuna basın. Aynı önekle eski komutlara geçiş yapmak için CTRL-R tuşlarına basmaya devam edin.

Bu bash yerleşik, komut dosyaları özelleştirmek veya yazılım yüklemek gerek yok :) Bu bash, imho en yararlı özelliklerinden biridir.


3
Bir komut yürütmüyorsanız (ihtiyacınız olanı bulamadıysanız) geçmiş arama modundan çıkmak için [ CTRL-g ] tuşunu kullanın .
MountainX-for-Monica

8

Aşağıdakileri bir terminal ekranına yapıştırın (Ctrl-Shift-V):

echo '"\e[A": history-search-backward' > ~/.inputrc
echo '"\e[B": history-search-forward' >> ~/.inputrc
echo 'set show-all-if-ambiguous on' >> ~/.inputrc
echo 'set completion-ignore-case on' >> ~/.inputrc

Terminal ekranından çıkın (Ctrl-D), ardından Terminal'i tekrar açın.

Artık ilk birkaç karakteri yazabilir, ardından filtrelenmiş listede gezinmek için Yukarı veya Aşağı tuşuna basabilirsiniz.


3
Bu işi yapan en basit cevap!
cxrodgers

8

Son Dönem

Son vadede denilen bu çok umut verici Terminal Uygulaması var . Birçok özelliği arasında, bir yeniden yazma komutları geçmişi vardır, böylece daha sonra seçebilirsiniz. İşte bazı özellikler:

Son Dönem

Bu makalede daha fazla bilgi edinebilirsiniz .

İşte içerik oluşturucuların web sitesi. http://finalterm.org/

Yüklemek için

sudo add-apt-repository ppa:versable/finalterm-daily
sudo apt-get update
sudo apt-get install finalterm

Uyarı

Bunun umut verici olduğunu söyledim. Tek sorun, 0.1 sürümünde olmasıdır. Yani bazı şeyler henüz iyi çalışmıyor vimve nanoçalışmıyor. Ayrıca Sürükle-Bırak özelliğini desteklemediğini, kopyalayıp yapıştırdığını da fark ettim. Ancak istediğiniz özelliğe sahip. Yazılım olgunlaştıkça, masaüstü için en iyi terminallerden biri olacak.

Ekran görüntüsü

İşte fonksiyon:

 eylem fonksiyonu

Bu yardımcı olur umarım.

* Saucy'dayım, bu yüzden bir Semender arka planım var :)


Bahşiş için teşekkürler! Final dönemine baktım ve iyi görünüyor. Ne yazık ki henüz kopyala yapıştırmayı desteklemiyor gibi görünüyor. Ctrl + V, Ctrl + Shift + V ve sağ tıklamayı denedim, ancak bunların hiçbiri işe yaramıyor. Bu yüzden bunu gelecek için aklımda tutacağım!
kramer65

Gördüğüm en büyük dezavantaj bu. Ancak, proje genç ve bu yüzden yakında ekleneceğini umuyorum. Kopyala-yapıştır desteği ile bir terminal uygulaması görebilirsiniz.
Max Tither

7

Bir kullan aliassenin tüm komut için veya içine dizin eklemek $PATH. Ayrıca, yürütülebilir dosyaları (veya komut dosyasını veya herhangi bir şeyi) çalıştırmak için dizinleri değiştirmek zorunda değilsiniz, bu yüzden oldukça basittir. Her iki yöntem de değişikliklerin geçerli olması için kullandığınız terminali yeniden başlatmanızı gerektirir.

Örneğiniz için a'yı nasıl oluşturacağınız bash aliasaşağıda açıklanmıştır ( ~/.bashrcdosyanıza aşağıdaki satırı ekleyin ):

alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set'

Bu şekilde, tek yapmanız gereken runmyprojectseçenekleri / bağımsız değişkenleri belirtmek zorunda kalmadan nerede olursanız olun terminale girmek.

Alternatif olarak, proje yolunuzu $PATHortam değişkeninize ekleyebilirsiniz . Bunu yapmak için ~/.bashrcdosyanıza aşağıdaki satırları ekleyin :

PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH
export PATH

Bu durumda, çalıştırılabilir dosya için seçeneklerinizi / bağımsız değişkenlerinizi belirtmeniz gerekir.


1
Mesele şu ki, terminalin kullanımım için duyarlı olmasını istiyorum. Bununla yeni projeler üzerinde çalışmaya başladığımda veya projemin dizin yapısını değiştirdiğimde takma adı değiştirmem gerekiyor. Sorumun ana kısmı, ne yapacağımı söylemek yerine, kullandığım şeyden öğrenmesini istemem.
kramer65

Ah, anlıyorum. O zaman şu anda en çok puan alan cevap hile yapmalıdır. Ya da en azından yakından.
oaskamay

4

Kendimi sık sık böyle bir dizine değiştirmek zorunda bulduğumda:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

Bunu sadece bir kez yapardım:

ln -s an/extremely/long/path/in/which/I/have/some/kinda/project ~/project

Ve bundan sonra şunu kullanın:

cd ~/pr[tab]

Konu söz konusu olduğunda:

./runmyproject --with some --command line --options set

Bash geçmişi aramasını kullanırdım. Komut isteminde sadece Ctrl-R tuşlarına basın ve 'runmy' yazın. Voila, en son girildiği gibi tüm seçeneklerle birlikte tüm komut yeniden girilecek. Son kullandığım seçenekleri beğenmediysem ve önceki komutlara bakmak isteseydim, "runmy" içeren önceki komutlar arasında dolaşmak için Ctrl-R tuşlarına basmaya devam ederdim.

Sytrink fikrinden hoşlanmıyorsanız, Ctrl-R geçmiş araması 'cd' komutuyla da yardımcı olabilir. [Ctrl-R] ​​/ proj , cd için kullandığınız son komutu o dizine geri getirebilir.

Bir takma ad eklemek veya özel bir kabuğa geçmek yerine, her zaman bu tür şeylere yardımcı olmak için tasarlanmış bash özelliklerini kullanmayı öğrenmeyi tercih ederim. Bu şekilde uzak makinelerde aynı özellikleri kullanabilirim veya bir meslektaşımın terminalinde oturmam gerekirse.


Önerin için teşekkürler. Mesele şu ki, örneğin proje klasörü değiştiğinde veya yeni bir proje başlattığımda dikkat ettiğim başka bir şey ayarlamak istemiyorum. Mesele şu ki, terminalin kullanımım için duyarlı olmasını istiyorum. Sorumun ana kısmı, ne yapacağımı söylemek yerine, kullandığım şeyden öğrenmesini istemem. Gerçi Ctrl-R fonksiyonunu gerçekten seviyorum. Bunun için teşekkürler!
kramer65


2

Bunu deneyin ... Bu, geçmiş dosyanızdaki tüm komutlar için çalışır ... Ctrl+ ile aynı şeydir R, ancak bence daha sezgisel :)

  1. Düzenle /etc/inputrc

    sudo vim /etc/inputrc
  2. uncomment veya bu iki satırı ekle

    "\e[5~": history-search-backward
    
    "\e[6~": history-search-forward
  3. çıkış / giriş


o zaman tarihte listelenen bir komut yazmaya çalışın ...

sevmek...

ls -lah

yazmak

ls

ve bas

Page Upveya Page Dn"ls" ile başlayan komutları bulmak için geçmiş dosyanızda gezinmek için

Her şeyi doğru yaptıysanız, komutunuzu otomatik olarak tamamlamalıdır ...

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.