Kita dapat menggunakan panah atas dan bawah untuk menavigasi dalam sejarah perintah.
Dalam beberapa IDE, seperti Matlab, jika kita memasukkan sesuatu dan kemudian tekan tombol panah, kita gulir hanya di antara perintah sejarah dimulai dengan apa yang kita masukan. Itu benar-benar nyaman, tetapi di terminal shell, ini tidak berhasil.
Apakah ada cara untuk mendapatkan fungsi serupa di terminal shell? Dan ada tips lain untuk meningkatkan efisiensi dalam penggunaan terminal?
fish
;)\e[5~
dan\e[6~
, penggunaan\e[A
,\e[B
.Jawaban:
Apa yang Anda cari adalah CtrlR.
Ketik CtrlRlalu ketikkan bagian dari perintah yang Anda inginkan. Bash akan menampilkan perintah pertama yang cocok. Terus mengetik CtrlRdan bash akan menggilir perintah yang cocok sebelumnya.
Untuk mencari mundur dalam sejarah, ketik CtrlSsaja. (Jika CtrlStidak bekerja seperti itu untuk Anda, kemungkinan itu berarti bahwa Anda perlu menonaktifkan XON / XOFF flow control: untuk melakukan itu, jalankan
stty -ixon
.)Ini didokumentasikan di bawah "Pencarian" di
man bash
.sumber
Ctrl-Q
untuk keluar dari keadaan beku, jika Anda telah menekanCtrl-S
tanpa mematikan kontrol aliran terlebih dahulu dan membuat terminal Anda beku.Tempatkan ini di Anda
~/.inputrc
:Ini membuat Page Updan Page Downberperilaku seperti yang Anda inginkan. (Beberapa distribusi sudah mengkonfigurasinya untuk Anda.) Saya pribadi menemukan cara ini lebih nyaman daripada Ctrl+ Ratau
history
.sumber
~/.inputrc
atau/etc/inputrc
atau file yang dirujuk oleh variabel lingkungan$INPUTRC
adalah file konfigurasi pengeditan baris semua aplikasi menggunakan readline, termasuk bash (shell Anda). Ia memiliki kemampuan pengeditan baris bawaan tertentu, termasuk keduanya: dalam pencarian halaman manual bash untuk salah satu kata kunci ini untuk mengetahui lebih lanjut.\e[5~
/\e[6~
adalah urutan pelepasan yang dihasilkan oleh tombol Page Up / Down di sebagian besar emulator terminal; untuk melihatnya, jalankancat
perintah dan kemudian tekan tombol-tombol ini (byte melarikan diri diwakili di terminal sebagai^[
, di inputrc sebagai\e
).echo $INPUTRC
itu kosong. Saya menggunakan Ubuntu 14.04"\e[A": history-search-backward
dan"\e[B": history-search-forward
Selain riwayat ^ r / ^ i-search:
alt.menyisipkan "kata" terakhir dari perintah sebelumnya di kursor. Ulangi untuk mendapatkan kata terakhir dari perintah yang lebih lama. (Tetapi perhatikan bahwa trailing
&
dianggap sebagai kata terakhir untuk perintah latar belakang).Ini sangat berguna untuk
mkdir foo
,cd
alt-dot. Bahkan lebih cepat daripada panah atas, ^ a, alt-d (hapus kata depan)cd
,.Untuk mendapatkan kata ke-2 ke terakhir, gunakan
esc
-
2
alt+.
(yaitu gunakan argumen numerik gaya emacs untukalt+.
. Negatif dihitung dari akhir, jumlah positif maju dari awal.) Tapi ini biasanya lebih banyak masalah daripada nilainya; pada titik tertentu lebih cepat untuk meraih mouse dan salin / tempel, atau panah atas dan ^ w / ^ y bagian dari itu (lihat di bawah).Jika terminal Anda diatur dengan baik / benar, ctrl-kiri dan ctrl-kanan akan mundur / maju dengan kata-kata. Jika tidak, semoga setidaknya alt-b dan alt-f akan melakukan hal yang sama.
ctrl- / adalah undo. Anda dapat menggunakan pengulangan otomatis untuk menghapus kata-kata jauh lebih efisien jika Anda dapat membatalkan ketika Anda melakukan overshoot sedikit.
Pencampuran / pencocokan perintah yang lebih kuat berasal dari penggunaan kill-ring, yang berfungsi seperti di Emacs. ctrl-y untuk menempelkan ctrl-w / ctrl-u / ctrl-backspace / alt-d terakhir. alt-y untuk menggilir teks yang sudah lama dibunuh.
Beberapa ctrl-w atau apa pun secara berturut-turut dibuat pada entri kill-ring. Gunakan panah kiri dan kanan atau sesuatu untuk memecah entri jika Anda ingin menghapus dua hal dan hanya menempel satu di kemudian hari.
Menggabungkan semua ini bersama-sama, Anda bisa
alt+r
mengembalikannya seperti sebelum Anda menghapusnya.>
untuk pergi ke akhir sejarah (yaitu panah ke bawah sepanjang jalan), untuk kembali ke perintah Anda berada di tengah.Kiat penggunaan interaktif lainnya:
Aktifkan
shopt -s globstar
, sehingga Anda dapat melakukan**/*.c
(rekursif termasuk direktori saat ini). Terkadang berguna untuk penggunaan interaktif, tetapi biasanyafind -name '*.c' -exec foo {} +
lebih baik.Jika Anda menulis skrip bash, Anda juga akan merasa mudah untuk
shopt -s extglob
mengaktifkannya di shell interaktif. Terkadang Anda akan menemukan penggunaan untuk hal-hal seperti*.!(c|h)
mencocokkan file yang tidak berakhir dengan .c atau .h.Cari alias yang Anda suka untuk
ls -l
,less
dan apa pun yang Anda lakukan banyak. (cp -i
,,mv -i
danrm -I
bagus. Jangan terbiasa bergantung pada mereka untuk melakukan rm selektif. GNU rm's -Saya meminta sekali untuk semua argumen.)Saya suka
alias m=less
(m untuk "lebih"). Saya telahless
mengatur ,dan .terikat dengan file sebelumnya / berikutnya (lesskey
). Standarnya adalah urutan multi-penekanan tombol yang tidak dapat digunakan dengan pengulangan otomatis.Saya suka melakukan semua yang ada di dalam layar GNU. Saya merasa lebih mudah untuk melacak jendela layar bernomor daripada muatan kapal di Konsole (atau emulator terminal lain yang pernah saya coba). Jika Anda belum mengetahuinya
screen
, pelajari tmux karena lebih baru dan lebih halus.Untuk mendapatkan sesuatu seperti fungsi membuka shell baru dengan cwd yang sama seperti shell lain, saya menggunakan hook kustom untuk cd / pushd / popd yang memungkinkan saya lakukan
cds 8
untuk cd ke apa pun dir shell saya di jendela layar 8 gunakan. Ini berfungsi bahkan untuk shell di luar sesi layar, selama hanya ada satu sesi layar.sumber
gnome-terminal
di Ubuntu 14,04, sebelum saya beralih ke KDE. Opsi yang relevan ada di pengaturan terminal Anda, awalan esc vs bit tinggi, dan mungkin beberapa pengaturan lainnya. Beberapa dari mereka tidak bekerja dengan sempurna untuk saya melalui ssh. (mis. ctrl kiri / kanan mengurung kode escape untuk tombol panah, dan saya5D
muncul secara harfiah)Tambahkan baris berikut ke
~/.inputrc
Ini mirip dengan jawaban egmont, tetapi alih-alih menggunakan Page Up dan Page Down, ia menggunakan urutan escape untuk Arrow Up dan Arrow Down. Cara ini jauh lebih nyaman digunakan pada Mac.
sumber
Saya selalu cenderung mengkonfigurasi mesin saya dengan nilai HISTSIZE besar sehingga menyimpan daftar sejarah yang lebih lama, serta HISTTIMEFORMAT dengan nilai cap waktu sehingga saya dapat melihat kapan perintah dijalankan.
sumber
Cara yang biasanya saya gunakan adalah menggabungkan
history
perintah dengangrep
YAITU:
Itu akan menampilkan riwayat nomor perintah yang Anda ketikkan yang berisi perintah itu, Anda kemudian dapat menggunakan:
untuk mengulangi perintah itu.
YAITU:
history | grep history
diikuti oleh:
!571
akan berulang
history | grep history
sumber
!
penggantian riwayat kurang aman.Saya menggunakan 4 tips setiap hari (dan beberapa lainnya) di terminal bash saya:
Jalankan perintah terakhir:
!!
Jalankan perintah N dari sejarah:
!N
Cetak perintah terakhir dimulai dengan awalan dari sejarah:
!prefix:p
Jalankan perintah terakhir dimulai dengan awalan dari sejarah:
!prefix
sumber
Jika tidak apa-apa bagi Anda untuk menggunakan
zsh
alih-alihbash
Anda menggunakan cona gunakan oh-my-zsh untuk itu.Ini berisi panah panah atas navigasi melalui riwayat perintah Anda. Hal ini memungkinkan juga, navigasi yang sama ketika Anda sudah mengetik teks (seperti Mathlab).
sunting: Ini juga berisi hal-hal lain yang berfokus pada pengembang, seperti alias dan tema. Tambahan itu membuat distro lebih besar dan lebih kompleks untuk digunakan.
https://github.com/robbyrussell/oh-my-zsh
sumber
oh-my-zsh
berisi banyak barang. Anda mungkin juga mengatakan: Fitur persis ini termasuk dalam distro itu, ketika semua yang Anda butuhkan adalah pengaturan atau aplikasi tertentu.Tambahkan alias berikut ke ~ / .bashrc
Penggunaan:
h fire
akan memberi saya daftar perintah berisi api . atauh ^fire
akan membuat saya daftar perintah mulai dengan api .Ini berguna ketika saya ingin melihat serangkaian perintah secara bersamaan.
Omong-omong,
'"'"'
jelek tapi saya tidak bisa menemukan cara lain untuk menghindari tanda kutip tunggal dalam tanda kutip tunggal.sumber
h="history | awk '{\$1=\"\"; print}'
harus bekerja. alternatifnya buat fungsi dan panggil itu.