Bagaimana cara mengingat perintah sebelumnya (tanpa eksekusi) untuk mengubahnya?

14

Saya tidak dapat mengingat trik di mana saya bisa mendapatkan perintah terakhir tanpa menjalankannya:

katakanlah saya ingin dapat mengakses perintah! 1255 ketika menekan tombol panah atas dan memodifikasi perintah. Jadi apa trik untuk memanggil perintah, membuatnya ditampilkan di baris perintah tetapi tidak dieksekusi dan kemudian dapat diakses melalui tombol panah ke atas?

Saya mencoba dengan menempatkan gema, tetapi kemudian saya memiliki gema sebelum perintah, saya tidak ingat bagaimana melakukannya dengan benar.

Arturas M
sumber
4
jika saya memahami permintaan Anda dengan benar, mungkin coba saja sufiks ": p" seperti pada "! 1255: p"
Theophrastus
@Theophrastus ya, tepatnya, saya lupa ini: bagian p dan sepertinya tidak bisa mendapatkan kata kunci yang tepat di google untuk menemukannya ... Terima kasih teman-teman.
Arturas M

Jawaban:

21
!1255:p

Akan melakukan ini

!is history recall
1255adalah nomor baris yang
:pdicetak tetapi tidak dieksekusi

Kemudian Anda dapat menggunakan panah atas untuk mendapatkan kembali perintah sebelumnya (tidak dijalankan) dan Anda dapat mengubahnya sesuai kebutuhan.

Saya sering menggabungkan ini dengan hg("History Grep") - alias favorit saya.

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

Ini mencari teks pada baris sejarah terbaru, terlepas dari kasus dan digunakan dengan cara ini:

Ketika saya ingin mencari perintah vi baru-baru ini untuk mengedit file tertentu dan kemudian saya ingin menggunakan salah satunya untuk mengedit file yang sama tetapi dengan ekstensi file yang berbeda.

$ 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]

Saya juga mendefinisikan hga("History Grep All") untuk mencari seluruh riwayat saya:

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

tetapi saya tidak menggunakannya terlalu banyak karena riwayat saya (sengaja) sangat besar dan saya mendapatkan terlalu banyak output yang kemudian mempengaruhi pengguliran kembali melalui halaman di terminal saya.

Michael Durrant
sumber
2
Perhatikan bahwa hgini juga CLI Mercurial .
usandfriends
1
Catatan yang bagus. Ditambahkan ke jawaban.
Michael Durrant
12

Menekan Ctrl+ R(Yang mana adalah kunci reverse-incremental-search emacs ketika @gnp bergerak di komentar) di terminal memungkinkan Anda untuk mencari di histori untuk perintah tertentu. Perintah akan ditampilkan dan dapat diedit sebelum dieksekusi. Anda akan melihat sesuatu seperti ini:

masukkan deskripsi gambar di sini

Sumber

Hamza Abbad
sumber
1
Terima kasih! Tidak benar-benar jawaban langsung untuk pertanyaan saya, tetapi saya tidak tahu ini dan saya merasa sangat berguna. Terima kasih banyak!
Arturas M
1
Juga patut dicatat, Ctrl + R adalah pencarian reverse-incremental emacs. Banyak emacs keybindings bekerja di banyak alat GNU: Ctrl + A, Ctrl + E, Ctrl + K, Ctrl + Y dan lainnya.
GnP
@gnp Terima kasih atas informasinya, saya tidak tahu itu.
Hamza Abbad
Butuh waktu lama untuk merasa nyaman dengan ctrl-r setelah mempelajari dua hal penting. 1. abaikan output saat Anda mengetik. 2. Pastikan Anda cukup tahu untuk mengetik cukup unik untuk perintah yang Anda inginkan
Michael Durrant
7

yang fcperintah melakukan apa yang Anda inginkan

fc -l <number> akan mencantumkan riwayat perintah di sekitar nomor itu

fc <number>akan membuka entri baris perintah di vim(atau apa pun editor default Anda saya kira), sehingga Anda dapat mengeditnya, dan setelah :wqitu akan tersedia untuk Anda dengan panah atas.

Saus
sumber
7

Dalam bash Ctl+alt+etidak ekspansi shell, dengan demikian mengetik !1255dan kemudian menekan kombinasi ini akan menggantikan baris saat ini dengan isi entri sejarah 1255

adonis
sumber
tidak melakukan itu untuk saya di Ubuntu
Michael Durrant
@MichaelDurrant, saya baru saja mencoba pada 14,04 (kubuntu) dan itu berfungsi untuk saya. Itu didokumentasikan man bashsebagai shell-expand-line. Mungkin ada pintasan yang ditetapkan untuk gnome-terminal.
adonis
@ Adonis Saya tidak pernah tahu yang ini, terima kasih banyak, memang itu yang saya minta juga. Dan memang saya dapat menemukan lebih banyak kegunaan dari fungsi ini. Luar biasa! Terima kasih!
Arturas M
4

Anda ingin menggunakan perintah fc saat menentukan daftar alih-alih mengeksekusi (-l)

fc -ln -1
meong
sumber