Anda dapat menentukan urutan karakter yang dikeluarkan oleh sebuah tombol dengan menekan Ctrl- vpada baris perintah, lalu menekan tombol yang Anda minati. Di sistem saya untuk F12, saya mengerti ^[[24~
. The ^[
mewakili Esc. Jenis terminal atau emulator terminal yang berbeda dapat mengeluarkan kode yang berbeda untuk kunci yang sama.
Pada prompt Bash Anda dapat memasukkan perintah seperti ini untuk mengaktifkan makro kunci sehingga Anda dapat mencobanya.
bind '"\e[24~":"foobar"'
Sekarang, saat Anda menekan F12, Anda akan mendapatkan "foobar" pada baris perintah yang siap untuk pengeditan lebih lanjut. Jika Anda ingin menekan tombol untuk segera memasukkan perintah, Anda dapat menambahkan baris baru:
bind '"\e[24~":"pwd\n"'
Sekarang ketika Anda menekan F12, Anda akan mendapatkan direktori saat ini ditampilkan tanpa harus menekan Enter. Bagaimana jika Anda sudah mengetik sesuatu di baris dan Anda menggunakan ini yang secara otomatis dijalankan? Itu bisa jadi berantakan. Namun, Anda dapat menghapus garis sebagai bagian dari makro Anda:
bind '"\e[24~":"\C-k \C-upwd\n"'
Spasi tersebut memastikan bahwa Ctrl- umemiliki sesuatu untuk dihapus agar bel tidak berbunyi.
Setelah Anda membuat makro berfungsi seperti yang Anda inginkan, Anda dapat membuatnya tetap dengan menambahkannya ke ~/.inputrc
file Anda . Tidak perlu bind
perintah atau kumpulan tanda kutip tunggal terluar:
"\e[24~":"\C-k \C-upwd\n"
Edit:
Anda juga dapat membuat pengikatan kunci yang akan mengeksekusi sesuatu tanpa mengganggu baris perintah saat ini.
bind -x '"\eW":"who"'
Kemudian saat Anda mengetik perintah yang membutuhkan nama pengguna, misalnya, dan Anda perlu mengetahui nama pengguna yang masuk, Anda dapat menekan Alt- Shift- Wdan output dari who
akan ditampilkan dan prompt akan dikeluarkan kembali dengan perintah parsial Anda utuh dan kursor berada pada posisi yang sama di baris.
Sayangnya, ini tidak berfungsi dengan baik untuk kunci seperti F12yang menghasilkan lebih dari dua karakter. Dalam beberapa kasus, hal ini dapat diatasi.
Perintah ( who
dalam hal ini) dapat berupa apa saja yang dapat dieksekusi - program, skrip, atau fungsi.
bind '"\C-q": menu-complete'
misalnya (atau di~/.inputrc
: Anda"\C-q": menu-complete
). Anda juga mungkin perlustty -ixon
di Anda~/.bashrc
untuk kontrol aliran menonaktifkan dan make ^ S dan ^ Q yang tersedia.^[
mewakiliesc
dan kemudian Anda tampaknya menggantikannya\e
dalam contoh Anda. Bisakah Anda menjelaskan mengapa?^[
adalah representasi keluaran. Ini\e
adalah salah satu cara untuk memasukinya (^[
tidak berfungsi untuk itu).Anda dapat menentukan pengikatan kunci bash di
~/.inputrc
(file konfigurasi untuk pustaka GNU Readline). Sintaksnya adalah<keysym atau nama kunci>: makro
sebagai contoh:
Control-o: "> output"
akan membuat makro yang memasukkan "> keluaran" saat Anda menekan ControlO
"\e[11~": "echo foobar"
akan membuat makro yang menyisipkan "echo foobar" ketika Anda menekan F1... Saya tidak tahu untuk apa keysym F11itu begitu saja.
Edit:
.inputrc
memahami\n
urutan escape untuk linefeed, sehingga Anda bisa menggunakannya"\e[11~": "echo foobar\n"
Yang secara efektif akan 'tekan enter' setelah perintah dikeluarkan.
sumber
Alt
, gunakan\e
, misalnya"\eo": "> output"
..inputrc
lihat hackaday.com/2018/01/19/linux-fu-custom-bash-command-completionSolusi ini khusus untuk lingkungan X11 dan tidak ada hubungannya dengan bash, tetapi menambahkan yang berikut ini ke .Xmodmaps Anda
% loadkeys keycode 88 = F12 string F12 = "foobar" %
akan mengirim string "foobar" ke terminal setelah menekan F12.
sumber
Saya ingin terikat
Ctrl+B
pada sebuah perintah. Terinspirasi oleh jawaban di atas, saya mencoba menggunakanbind
tetapi tidak dapat menemukan rangkaian coretan samar (\e[24~
?) Yang diterjemahkan keCtrl+B
.Di Mac, buka Pengaturan aplikasi Terminal, Profil -> Keyboard ->
+
lalu tekan pintasan keyboard yang Anda cari dan keluar. Bagi sayaCtrl+B
menghasilkan di\002
mana saya berhasil terikat pada perintahbind '"\002":"echo command"'
Selain itu, jika Anda ingin perintah dieksekusi segera (tidak hanya dimasukkan ke dalam prompt), Anda dapat menambahkan Enter ke akhir perintah Anda, seperti:
bind '"\002":"echo command\015"'
sumber