Untuk meminta agar perintah dicetak daripada dieksekusi setelah penggantian sejarah, tambahkan :p
pengubah , misalnya !42:p
. Perintah yang dihasilkan juga akan dimasukkan dalam riwayat, sehingga Anda dapat menekan Upuntuk mengeditnya.
Jika Anda memiliki histverify
opsi set ( shopt -s histverify
), Anda akan selalu memiliki kesempatan untuk mengedit hasil dari penggantian riwayat.
The fc
builtin memberikan akses terbatas ekspansi sejarah (ada kata designators), dan memungkinkan Anda mengedit perintah sebelumnya dalam editor eksternal.
Anda bisa menggunakan !prefix
untuk merujuk ke perintah terakhir yang dimulai dengan prefix
, dan !?substring
untuk merujuk ke perintah terakhir yang dimulai dengan substring
. Ketika Anda tahu apa yang Anda cari, ini bisa menghemat banyak waktu history | less
.
Cara lain untuk mencari melalui riwayat sebelumnya adalah pencarian tambahan: tekan Ctrl+ Rdan mulai memasukkan substring dari apa yang Anda cari. Tekan Ctrl+ Runtuk pergi ke kemunculan string pencarian sebelumnya sejauh ini dan Ctrl+ Sjika Anda sudah terlalu jauh. Sebagian besar tombol selain Ctrl+ R, Ctrl+ S, Backspacedan karakter biasa menghentikan pencarian inkremental dan memiliki efek yang biasa (mis. Tombol panah untuk memindahkan kursor pada garis yang telah Anda capai, Enteruntuk menjalankan perintah).
Gilles 'SANGAT berhenti menjadi jahat'
sumber
stty -ixon
sebelum Ctrl-s bekerja.Ctrl-s
itu penting, kalau tidak salah akan macet seperti saya .Satu lagi kecil: Alt+#
mengomentari baris saat ini dan memindahkannya ke buffer sejarah.
Jadi, ketika Anda sedang merakit baris perintah dan Anda perlu mengeluarkan perintah sementara untuk mis menemukan file, Anda cukup menekan Alt+ #, mengeluarkan perintah lain, naik dalam sejarah, batalkan komentar dan lanjutkan.
sumber
Esc
,#
bekerjaAnda dapat menggunakan ruang ajaib untuk memperluas sejarah sebelum menekan enter. Di .inputrc Anda, petakan ruang ke ruang ajaib:
Sekarang, setiap kali Anda mengetik spasi setelah spesifikasi riwayat, itu akan segera diperluas - berguna jika Anda ingin mengeditnya juga!
sumber
Lihatlah
history-expand-line
perintah, terikatAlt+^
secara default. Ini akan memperluas baris di tempat yang dapat Anda edit.sumber
Menggunakan
Ctrl+r
Anda dapat mencari riwayat:Perintah apa pun yang Anda temukan dapat diedit ...
Saya pikir saya menemukan apa yang Anda butuhkan: jalankan
shopt -s histverify
dan lain kali ketika Anda ingin menggunakan!n
perintah tidak akan dieksekusi tetapi hanya dimasukkan ke baris perintah ...sumber
!n:p
bekerjaSaya sering menginginkan ini. Ketika saya menggunakan csh (dan tcsh), saya memiliki ungkapan:
!:88*:p
Idiom ini menyisipkan "kata 88 hingga kata terakhir" dari perintah sebelumnya pada titik di mana Anda mengetik pada baris perintah saat ini, yang biasanya merupakan akhir. Dalam csh, itu bukan kesalahan untuk ungkapan seperti itu untuk tidak menghasilkan kata-kata. Artinya, tidak perlu ada kata 88, tidak ada yang mengikutinya. Jika tidak ada kata 88, ini tidak menambahkan kata ke akhir perintah yang sedang diketik, dan kemudian mendorong baris perintah yang dihasilkan ke dalam sejarah tanpa eksekusi.
Seperti yang mungkin Anda ketahui,
*! (seperti !! dan! -1) adalah perintah sebelumnya;
*: 88 adalah kata 88 (kata pertama - biasanya perintah - adalah nol) dan csh akan membutuhkan kata demikian, tetapi ...
*: 88 * adalah semua kata yang dimulai dari kata 88, dan kemudian csh tidak tidak membutuhkan kata untuk ada;
*: p berarti mencetak, tetapi jangan mengeksekusi baris perintah.
Dengan atau tanpa: p, baris perintah ditambahkan ke histori perintah.
"Kenapa 88?" kamu bertanya-tanya Karena itu adalah kunci yang sama dengan * yang saya perlukan. Jika Anda memiliki perintah selama itu, mungkin!: 888 *: p adalah yang Anda butuhkan. Maaf ini tidak bekerja dengan bash AFAIK. Bash hanya akan mengatakannya
bash: :88*: bad word specifier
Fakta menyenangkan: perintah Anda biasanya tidak perlu menjadi yang pertama.
> /tmp/foo echo My command is word 3
valid dalam bash dan csh.
sumber
Saya biasanya menggunakan Ctrl+ runtuk mencari dan kemudian Ctrl+ euntuk pergi ke akhir baris tanpa mengeksekusi.
sumber