BASH'da ters-i-arama ile nasıl çevrilir?


443

Terminalde, CTRL-Rdaha önce BASH ile yazılan eşleşen bir komutu aramak için yazabilirim . Ben yazarsanız Örneğin, CTRL-Rardından greplisteler benim sonuncusu grepkomut ve bunu kullanmak girmek vurabilir. Bu sadece bir öneri olsa veriyor. Önceden yazılmış diğer eşleme komutları arasında geçiş yapmanın bir yolu var mı?

Yanıtlar:


596

Soruyu doğru anlarsam, art arda vurarak alternatifler arasında geçiş yapabilmeniz gerekir Ctrl+R.

Örneğin:

Ctrl+R grep Ctrl+R Ctrl+R ...

Bu geçmişinizde geriye doğru arama yapar. Bunun yerine ileriye doğru arama yapmak için kullanın Ctrl+S, ancak devraldıran XON / XOFF özelliğini devre dışı bırakmak için bundan önce stty -ixon(veya tarafından .bash_profileveya elle) ayarlamanız gerekebilir Ctrl+s. (Daha fazla ayrıntı burada .)


23
+1 - FYI - Bu StackOverflow cevabına göre ileri arama da yapabilirsiniz .
Jordan Arseno,

7
Ve eğer geçerseniz ters kaydırma için Ctrl + Shift + r tuşlarını kullanın.
Kasım'da 15:15

19
@wiswit CTRL+SHIFT+rbenim için çalışmıyor.
Maxim Suslov

9
@MaximSuslov Bu soruya bakınız: stackoverflow.com/questions/791765/…[[ $- == *i* ]] && stty -ixon .bashrc CTRL+shesabınıza ekleyebilir ve daha sonraCTRL+r
gla3dr 21.01.01.2007

9
@JordanArseno "Henüz yazmamış olduğum komutları ara" demek için "ileri arama" yaptım
Josh Johnson

234

Komutun sık kullanılacağını düşünüyorsanız, bir etiket ekleyebilirsiniz.

komut #useful

Sonra

ctrl+r #useful

Bu işe yarıyor çünkü #yorum sınırlayıcı, yani sembolden sonra gelen her şey komut olarak yorumlanmadı. Ancak, tarihe kaydedilecek ve bu yüzden aranabilir.


5
Genelde bu tarz etiketlerden hoşlanırım. #trg_bld #open_log
Makesh

1
bu etiket nereye eklenir?
Sudip Bhandari

5
@ SuudiBhandari emrinizden hemen sonra. # bir yorum başlatır. Örneğin, ls -lah #useful
Andrei

47

Bu satırları ~ / .inputrc dosyasına ekleyerek biraz farklı bir arama yapmak için yukarı ve aşağı okları ayarlayabilirsiniz:

"\e[A": history-search-backward
"\e[B": history-search-forward

Komutun herhangi bir yerinde bir alt dize aramak yerine (gibi Ctrl-r ) imlecin solundaki metinle başlayan bir komut arayacaktır . Örneğin, bu komutları çalıştırırsam:

$ ls bart
$ ls fools

sonra lsyazıp Upiki kez basın , gösterilecek ls bartve imleç aynı yerde olacaktır. Son satırda iki kere bulacağı Ctrl- ile karşılaştırın , böylece önceki satırı bulmak için bir kez daha basmanız gerekir.rls

Bu yaklaşımların her ikisinin de güçlü yanları vardır ve her ikisi de çok zaman kazandırabilir.


2
Bu, OS X'te de standarttır, bu yüzden ~/.inputrcbu iki satırı oluşturmanıza ve eklemenize gerek yoktur .
DASKAjA

1
Falconepi'nin bu cevabın yorumlarında yazdığı gibi, Ubuntu'da sadece ~/.inputrctarih-arama- * dahil olmak üzere iki satırda rahatsızlık duymanız gerekir
Arpad Horvath

Bu yazıya daha fazla ayrıntı için bu yazıya da bakabilirsiniz: codeinthehole.com/writing/…
Andrei

Bu, macOS'umda standart değildi (10.13). Bu işlevi her zaman özledim!
forthrin

Bununla ilgili iyi bir şey, tarih boyunca düzenli olarak gezinmek için ctrl-p / ctrl-n'yi kullanmaya devam edebilmenizdir
elig

0

YerleşikCtrl + R olarak hstr adında bir yedek var . Tüm arama belirteçlerine uyan komut geçmişini aynı anda (diğer şeylerin yanı sıra) arayabilir ve ok tuşlarını kullanarak sonuçta dolaşabilirsiniz:

Örnek

İşte bir demo screencast .

Aşağıdaki gibi bir Debian ailesi işletim sistemine yüklenebilir:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc

Ve sonra kullanın Ctrl + R(terminali yeniden açtıktan sonra).

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.