Apa pintasan keyboard untuk baris perintah?


10

Saya berbicara tentang cara pintas keyboard yang Anda gunakan di baris perintah / terminal.

Contoh: Ctrl+ cyang membunuh proses, Ctrl+ dyang keluar, Ctrl+ zyang mengirim proses ke latar belakang ... dll.

Saya telah diuji beberapa dan menemukan bahwa mereka tidak terminal (yaitu gnome-terminal, xterm, konsole) tertentu atau shell (yaitu bash, zsh) tertentu, mereka bahkan bekerja di ttys.

Jadi, saya ingin tahu:

  • Siapa yang menyediakan pintasan ini?
  • Bagaimana saya bisa mendaftar dan memodifikasi / mendefinisikannya?

Coba bind -pdaftar, jadi help binduntuk yang lain
Costas

Jawaban:


10

Driver terminal kernel ( termios) mengartikan kunci khusus yang dapat diketik untuk mengirim sinyal ke suatu proses, mengirim akhir file, menghapus karakter, dll. Ini adalah fungsi dasar kernel Unix dan sangat mirip pada sebagian besar implementasi Unix dan Linux.

The sttyperintah menampilkan atau set yang termioskarakter khusus, serta parameter lain untuk driver line terminal.

Meminta stty -auntuk melihat nilai saat ini dari karakter khusus dan "pengaturan terminal terminal" lainnya. Dalam contoh berikut, Anda dapat melihat bahwa itu intradalah Ctrl+ C, eofadalah Ctrl+ D, suspadalah Ctrl+ Z. (Saya telah menghapus output lain untuk hanya menampilkan pengaturan karakter khusus):

stty -a karakter khusus pada GNU / Linux:

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;

stty -a karakter khusus pada FreeBSD:

cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
        erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;

Untuk mengubah nilai karakter khusus, misalnya, untuk mengubah karakter interupsi dari Ctrl+ Cke Ctrl+ Ememanggil sttyseperti ini ( ^Esecara harfiah adalah dua karakter, sirkumfleks ( ^) diikuti oleh huruf E):

stty intr '^E'

Untuk informasi lebih lanjut lihat halaman manual untuk sttydan termios. Di GNU / Linux Anda juga dapat melihat tty_ioctlhalaman manual.

Catatan:

The intrkey ( Ctrl+ Csecara default), tidak benar-benar membunuh proses, tetapi menyebabkan kernel untuk mengirim sinyal interupsi ( SIGINT) untuk semua proses dalam kelompok proses. Proses dapat mengatur untuk menangkap atau mengabaikan sinyal, tetapi sebagian besar proses akan berakhir, yang merupakan perilaku default.

Alasan Ctrl+ dlogout Anda adalah karena driver jalur terminal mengirim EOF (akhir file) pada input standar shell. Shell keluar ketika menerima ujung file pada input standar itu.


@Sukminder, di FreeBSD, -aopsi POSIX ditambahkan ke stty.
RobertL

Saya sudah mencobanya stty intr '^E'berfungsi (set) tetapi sementara dan hanya untuk terminal / tty saat ini. Bagaimana cara mengubahnya secara global & permanen?
Pandya

Saya pikir cara terbaik adalah dengan memanggil stty$ HOME / .profile atau $ HOME / .bashrc Anda atau file inisialisasi startup shell lainnya.
RobertL

Saya sudah mencoba: ia bekerja dengan terminal tetapi tidak berpengaruh padatty
Pandya

Apa yang Anda coba, apa yang Anda lihat, dan apa yang Anda maksud tty? Mungkin itu bisa menjadi pertanyaan baru?
RobertL

14

Dari http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

Command Editing Shortcuts

  • Ctrl+ a- pergi ke awal baris perintah
  • Ctrl+ e- pergi ke akhir baris perintah
  • Ctrl+ k- hapus dari kursor ke akhir baris perintah
  • Ctrl+ u- hapus dari kursor ke awal baris perintah
  • Ctrl+ w- hapus dari kursor ke awal kata (mis. Hapus mundur satu kata)
  • Ctrl+ y- rekatkan kata atau teks yang dipotong menggunakan salah satu pintasan penghapusan (seperti yang di atas) setelah kursor
  • Ctrl+ xx- bergerak antara mulai dari baris perintah dan posisi kursor saat ini (dan kembali lagi)
  • Alt+ b- mundur satu kata (atau lanjutkan ke kata saat kursor aktif)
  • Alt+ f- bergerak maju satu kata (atau pergi ke akhir kata saat kursor aktif)
  • Alt+ d- hapus ke akhir kata mulai dari kursor (seluruh kata jika kursor berada di awal kata)
  • Alt+ c- bermodalkan ke akhir kata mulai dari kursor (seluruh kata jika kursor berada di awal kata)
  • Alt+ u- membuat huruf besar dari kursor ke akhir kata
  • Alt+ l- membuat huruf kecil dari kursor ke akhir kata
  • Alt+ t- bertukar kata saat ini dengan sebelumnya
  • Ctrl+ f- bergerak maju satu karakter
  • Ctrl+ b- mundur satu karakter
  • Ctrl+ d- hapus karakter di bawah kursor
  • Ctrl+ h- hapus karakter sebelum kursor
  • Ctrl+ t- bertukar karakter di bawah kursor dengan yang sebelumnya

Command Recall Shortcuts

  • Ctrl+ r- cari riwayat mundur
  • Ctrl+ g- melarikan diri dari mode pencarian riwayat
  • Ctrl+ p- perintah sebelumnya dalam sejarah (yaitu berjalan kembali melalui sejarah perintah)
  • Ctrl+ n- perintah selanjutnya dalam sejarah (yaitu berjalan maju melalui sejarah perintah)
  • Alt+ .- gunakan kata terakhir dari perintah sebelumnya

Pintasan Kontrol Perintah

  • Ctrl+ l- hapus layar
  • Ctrl+ s- menghentikan output ke layar (untuk perintah verbose berjalan lama)
  • Ctrl+ q- memungkinkan keluaran ke layar (jika sebelumnya berhenti menggunakan perintah di atas)
  • Ctrl+ c- mengakhiri perintah
  • Ctrl+ z- menangguhkan / menghentikan perintah

Perintah Bash Bang (!)

Bash juga memiliki beberapa fitur praktis yang menggunakan! (bang) untuk memungkinkan Anda melakukan beberapa hal funky dengan perintah bash .

  • !! - jalankan perintah terakhir
  • ! blah - jalankan perintah terbaru yang dimulai dengan 'bla' (mis! ls)
  • ! blah: p - cetak perintah yang akan dijalankan ! blah (juga tambahkan sebagai perintah terbaru dalam riwayat perintah)
  • ! $ - kata terakhir dari perintah sebelumnya (sama dengan Alt +. )
  • ! $: p - cetak kata yang akan diganti $!
  • ! * - perintah sebelumnya kecuali untuk kata terakhir (misalnya jika Anda mengetik ' find some_file.txt / ', maka ! * Akan memberi Anda ' find some_file.txt ')
  • ! *: p - cetak apa yang akan diganti *!

1
@Sukminder Tidak, Ctrl + S tidak menghentikan output. Anda tampaknya membingungkan dengan Ctrl + Z.
Gilles 'SANGAT berhenti menjadi jahat'

Lihat juga: Emacs.
Erich

Bagus! Dan apakah ada cara untuk mencapai ^U, yang stty -amenunjukkan didefinisikan untuk SIGKILL di Linux, dari bash? Lebih disukai tanpa mendefinisikan hal-hal readline (mungkin melalui mod mod / meta ketiga). Saya menganggap itu hanya dibayangi oleh ctrl + u readline binding?
nyov
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.