geçmiş komutunu çalıştırmadan komut satırına koy


57

! N kullanıyorum (n) (n), geçmiş | |

Ancak, el ile değiştirmek istediğim bir komut satırı geçmişi olayı var. Komut satırına geçmiş olaylar içeriğini aslında çalıştırmadan nasıl ekleyebilirim, böylece değiştirebilir ve sonra return tuşuna basabilirim?

En iyi,

Yanıtlar:


71

Komutun, tarih değiştirme işleminden sonra çalıştırılmak yerine yazdırılmasını istemek için, :p değiştiriciyi , örn !42:p. Sonuçta ortaya çıkan komut geçmişe de girilecektir, böylece Updüzenlemek için basabilirsiniz .

Eğer varsa histverify seçeneği (set shopt -s histverify), her zaman tarih değiştirmelerin sonucu düzenlemek için bir fırsat olacaktır.

fcYerleşik tarih genişleme (hayır kelime koordinat belirleme) sınırlı erişim verir ve harici düzenleyicide bir önceki komutu düzenlemenizi sağlar.

!prefixİle başlayan son komuta başvurmak prefixve ile başlayan son komuta başvurmak için kullanabilirsiniz . Ne aradığınızı biliyorsanız, bu çok zaman kazandırabilir .!?substringsubstringhistory | less

Önceki geçmişe göre arama yapmanın başka bir yolu da artımlı aramadır: Ctrl+ tuşlarına basın Rve aradığınız şeyin alt metnini girmeye başlayın. Arama dizesinin önceki oluşumuna gitmek için Ctrl+ düğmesine Rve çok ileri gittiyseniz Ctrl+ tuşuna basın S. Dışındaki çoğu tuşları Ctrl+ R, Ctrl+ S, Backspaceve sıradan karakterler artan arama sona erdirmek ve olağan etki (, sen ulaştınız doğrultusunda imleci hareket ettirmek için örneğin ok tuşları var Enterkomutu çalıştırmak için).


İlk örneğinizde bir yazım hatası var ...
pbm 15:10

9
stty -ixonCtrl-s çalışmadan önce yapmanız gerekecek.
Dennis Williamson,

@Dennis: Vay, modern terminal emülatörleri bunu varsayılan olarak yapmazlar mı? <test> Haklısın, Ubuntu'daki GNOME terminalinde akış kontrolü var!
Gilles 'SO- kötülük

Neden hala yaptıklarını bilmiyorum. Kayarken bir şeyi yakalamak imkansız. Ctrl-s'ye bastığınızda, tekrar bir mesajınız var. Ve yavaş seri bağlantılar çoğunlukla geçmişte kaldı.
Dennis Williamson,

@ Dennis'in noktası Ctrl-sönemli, yoksa biri benim gibi sıkışıyor .
imz - Ivan Zakharyaschev

15

Başka bir küçük olan: Alt+#

Geçerli satırı yorumlar ve tarih arabelleğine taşır.

Bir komut satırı oluşturduğunuzda ve örneğin bir dosyayı bulmak için geçici bir komut vermeniz gerektiğinde, Alt+ tuşlarına #basmanız, diğer komutu vermeniz , tarihe geçmeniz, yorum yazmanız ve devam etmeniz yeterlidir.


2
Ayrıca Esc, #çalışır
Steven Penny

ve aslında ;-) diğer ket combo (fn + alt + shift + #) aksine bir mac (tutma vardiya birlikte ESC tuşuna basın ve #) üzerine yazabilirsiniz
0xF2

7

Enter tuşuna basmadan önce geçmişi genişletmek için sihirli alanı kullanabilirsiniz. .İnputrc'nizde, uzayı sihirli uzaya eşleyin:

$if Bash
     Space: magic-space
$endif

Şimdi, bir tarih belirtiminden sonra bir boşluk yazdığınızda, derhal genişletilir - düzenlemek de isterseniz kullanışlı!



4

Kullanarak Ctrl+rarama geçmişi yapabilirsiniz:

pbm@tauri ~ $ 
(reverse-i-search)`xran': xrandr -o normal

Bulduğun herhangi bir komut düzenlenebilir ...


İhtiyacınız olanı tam olarak bulduğumu düşünüyorum: Çalıştırın shopt -s histverifyve bir dahaki sefere !nkomut kullanmak istediğinizde çalıştırılmayacak, sadece komut satırına geçilecek ...


Vass'ın istediği şeyi değil, Ctrl + r ile aranmadan önce bir komut çalıştırmalısınız.
phunehehe

1
Bunun istediğini yapmadığını anlamıyorum. Eklemeden önce komutu çalıştırmadan önce komutu düzenlemek isterseniz, doğru komutu bulduktan sonra SEKME tuşuna basabilirsiniz.
Steven D

2
Böylece işlem, (1) Ctrl + r, (2) komutunu bulana kadar yazın, (3) TAB, (4) edit komutu, (5) ENTER.
Steven D

1
@phuenhehe: "Ancak elle değiştirmek istediğim bir komut satırı geçmişi olayı var"
pbm

1
Olmaz !n:pişe?
alex

1

Bunu sık sık istemişimdir. Csh (ve tcsh) kullandığımda bir deyim vardı:
!:88*:p

Bu deyim, geçerli komut satırına yazdığınız noktaya, önceki son komutun "son sözcüğüne 88" sözcüğünü ekler. Csh'de, böyle bir ifadenin kelime üretmemesi bir hata değildir. Yani, 88 kelimesine ya da onu takip etmeye gerek yoktur. 88 kelimesi yoksa, bu, yazılan komutun sonuna hiçbir kelime eklemez ve ardından sonuçtaki komut satırını yürütmeden geçmişe iter.

Muhtemelen bildiğiniz gibi,
*! (like !! and! -1) önceki komuttur;
*: 88, 88 kelimesidir (ilk kelime - genellikle komut - sıfırdır) ve csh, böyle bir kelime olmasını gerektirir, ancak ...
*: 88 *, 88 kelimesinden başlayan tüm kelimelerdir ve sonra csh, kelimenin var olmasını gerektirmez;
*: p, print anlamına gelir ancak komut satırını yürütmeyin.
: P ile veya p olmadan, komut satırı komut geçmişine eklenir.

"Neden 88?" Sen merak et? Çünkü ihtiyacım olanla aynı anahtar *. Bu kadar uzun bir süre emirleriniz varsa, belki de:: 888 *: p ihtiyacınız olan şeydir. Maalesef bu, AFAIK bash ile çalışmıyor. Bash sadece söyleyecek bash: :88*: bad word specifier

Eğlenceli gerçek: emrinizin genellikle ilk olması gerekmez.
> /tmp/foo echo My command is word 3
bash ve csh ile geçerlidir.


Soru bash için etiketlendiğinden, çözümünüzün sadece (t) csh ile çalıştığını söylemekle başlamak iyi olabilir.
zagrimsan

0

Normalde kullanmak Ctrl+ raramak ve daha sonra Ctrl+ eçalıştırmadan satırın sonuna gitmek için.



@JeffSchaller Göremiyorum. CTRL + R referansını görüyorum. Hayır, yukarıdaki yazılarda bulmacanın eksik parçası olan CTRL + E'yi nerede görüyorum?
nikc
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.