Değiştirmek için önceki bir komutu (yürütme olmadan) nasıl geri çağırırım?


14

Çalıştırmadan son komutu alabileceğim hileyi hatırlayamıyorum:

diyelim ki yukarı ok tuşuna basarken ve komutu değiştirirken! 1255 komutuna erişebilmek istiyorum. Komutu çağırmanın, komut satırında gösterilmesini ancak çalıştırılmamasını ve daha sonra yukarı ok tuşuyla erişilebilir olmasını sağlamak için hile nedir?

Bir yankı koymayı denedim, ama sonra komuttan önce bir yankı var, nasıl doğru yapılacağını hatırlamıyorum.


4
isteğinizi düzgün anlarsam, belki de sadece ": p" sonekini deneyin! 1255: p "
Theophrastus

@Theophrastus evet, tam olarak, bunu unutmuştum: p parçası ve bulmak için google'da doğru anahtar kelimeleri alamadım ... Teşekkürler çocuklar.
Arturas M

Yanıtlar:


21
!1255:p

Bunu yapacak

!geçmiş hatırlama
1255satır numarası
:pyazdırılır ancak yürütülmüyor

Daha sonra önceki (uygulanmamış) komutu geri almak için yukarı oku kullanabilirsiniz ve istediğiniz gibi değiştirebilirsiniz.

Bunu sık sık hg("Tarih Grep") - en sevdiğim takma adla birleştiriyorum.

$ alias hg  # Maybe use hgr instead if you are a Mercurial CLI user.
alias hg='history | tail -200 | grep -i'

Bu durum, durumdan bağımsız olarak yakın tarih geçmişindeki metni arar ve şu şekilde kullanılır:

Belirli bir dosyayı düzenlemek için son vi komutlarını aramak istediğimde ve aynı dosyayı farklı bir dosya uzantısıyla düzenlemek için bunlardan birini yeniden kullanmak istiyorum.

$ hg variables
 6153  vi Variables/user-extensions.js 
 6176  vi Variables/user-extensions.js 
 6178  vi Variables/user-extensions.js 
 6190  vi Variables/user-extensions.js 
 6230  hg variables
$ # Notice the difference in case with V and v is ignored
$ !6190:p
vi Variables/user-extensions.js 
$ ["up-arrow"]
$ vi Variables/user-extensions.[now change .js to .html]

Ayrıca hgatüm geçmişimi aramak için ("Geçmiş Grep Tümünü") tanımlarım :

$ alias hga
alias hga='history | grep -i'

ama çok fazla kullanmıyorum çünkü geçmişim (kasıtlı olarak) çok büyük ve daha sonra terminalimdeki sayfaları geri kaydırmayı etkileyen çok fazla çıktı alıyorum.


2
hgAyrıca Mercurial'ın CLI'sı olduğunu unutmayın .
usandfriends

1
İyi not. Cevaplamak için eklendi.
Michael Durrant

12

İsabet Ctrl+ R((emacs'ın yorumlarda hareket ettiği gibi @gnp'nin ters-artımlı arama anahtarı ciltlemesi) terminalde belirli bir komutu aramanıza izin verir. Komut gösterilir ve yürütülmeden önce düzenlenebilir. Bunun gibi bir şey göreceksiniz:

resim açıklamasını buraya girin

Kaynak


1
Teşekkürler! Sorumun doğrudan cevabı değil, ama bunu bilmiyordum ve gerçekten kullanışlı buluyorum. Çok teşekkür ederim!
Arturas M

1
Ayrıca dikkat çeken, Ctrl + R emacs'ın ters kademeli aramasıdır. Birçok emacs tuş bağlama birçok GNU aracında çalışır: Ctrl + A, Ctrl + E, Ctrl + K, Ctrl + Y ve diğerleri.
GnP

@gnp Bilgi için teşekkürler, bunu bilmiyordum.
Hamza Abbad

İki anahtar şeyi öğrendikten sonra ctrl-r ile rahat etmem uzun zaman aldı . 1. yazarken çıkışı yok sayın. 2. İstediğiniz komut için yeterince benzersiz yazabileceğinizden emin olun
Michael Durrant

7

fcKomut istediğini yapar

fc -l <number> bu sayının çevresindeki komut geçmişini listeler

fc <number>bu komut satırı girişini açar vim(veya varsayılan düzenleyiciniz her ne olursa olsun), böylece onu düzenleyebilirsiniz ve üzerine :wqyukarı okla erişebilirsiniz.


7

Bash'da Ctl+alt+ekabuk genişlemesi yapar, bu nedenle !1255bu kombinasyonun yazılması ve ardından basılması, mevcut satırın, geçmiş girdisinin 1255 içeriği ile değiştirilmesini sağlayacaktır.



@ MichaelDurrant, 14.04 (kubuntu) üzerinde denedim ve benim için çalışıyor. man bashOlarak belgelenmiştir shell-expand-line. Belki de gnome terminali için bir kısayol seti vardır.
adonis

@adonis Bunu hiç bilmiyordum, çok teşekkür ederim, gerçekten de istediğimi yapıyor. Ve aslında bu işlevden daha fazla kullanım alanı bulabilirim. Müthiş! Teşekkürler!
Arturas M

4

Yürüt (-l) yerine liste belirtirken fc komutunu kullanmak istiyorsunuz

fc -ln -1
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.