Menggunakan ikatan kunci Terminal dengan bash di macOS

51

Saya telah mencoba mempelajari cara pintas keyboard untuk shell di macOS, tetapi ketika saya mencoba menggunakan ALT+ B, itu tidak berhasil.

Bagaimana Anda menemukan, mengonfigurasi, dan menggunakan ikatan kunci di shell? Setiap lembar cheat akan membantu.

Buka jalannya
sumber
duplikat: superuser.com/questions/113103/… ... bukan spesifik OSX tetapi memang menyediakan banyak informasi tentang pemetaan keyboard bash standar, menyesuaikan readline , dan trik bash menyenangkan lainnya.
quack quixote
6
ini bukan duplikat dari pertanyaan di atas. yang ini adalah tentang bagaimana mendapatkan OSX untuk tidak menangkap ikatan kunci yang terikat ke terminal
Arthur Ulfeldt
3
Hapus tanda ini sebagai duplikat. Dibutuhkan jawaban yang mengindikasikan 'gunakan opsi sebagai meta key' untuk terminal OSX.
bentford

Jawaban:

12

Salah satu cara untuk menangani sekuens kunci 'meta' yang tidak berfungsi pada terminal OS X adalah dengan menetapkan sekuens karakter tertentu untuk penekanan tombol tertentu. Bagi kita dengan keyboard non-AS, ini sering merupakan solusi yang lebih baik daripada pengaturan "Gunakan opsi sebagai meta" yang disebutkan dalam komentar dari jawaban lain. (Banyak keyboard Mac internasional pada dasarnya tidak dapat digunakan untuk pekerjaan pengembangan tanpa tombol Option / alt karena karakter kritis tertentu tidak tersedia. Tidak ada #pada keyboard UK Mac, misalnya.)

Untuk membuat kata-kiri dan kata-kanan berfungsi untuk bash, saya telah menggunakan bagian "Keyboard" dari Pengaturan di Terminal. Anda dapat memerintahkannya untuk menghasilkan urutan kode tertentu ketika penekanan tombol tertentu dibuat. Saya telah mengkonfigurasi milik saya sehingga alt+ menghasilkan \033b(itu sebenarnya dua karakter: Esc, dan kemudian huruf kecil b) dan alt+ menghasilkan \033f(yaitu, Esc f). Ini memungkinkan Anda menggunakan tombol panah dengan tombol pilihan ditekan untuk mendapatkan kata perilaku kiri dan kanan.

Apa yang belum saya lakukan adalah bagaimana mendapatkan Esckunci untuk bekerja - secara teori Anda harus bisa menggunakannya untuk urutan 'meta' tetapi tampaknya tidak berfungsi. (Jadi hanya mengetik Esc+ bharus kembali satu kata.)

Jika Anda memiliki tata letak keyboard AS, atau keyboard lain yang Apple anggap cocok untuk menyediakan semua kunci yang benar-benar Anda butuhkan, maka seperti yang lainnya telah menyarankan, "Gunakan opsi sebagai meta key" (juga di bagian Keyboard dari pengaturan Terminal) mungkin merupakan pilihan yang lebih baik karena Anda bisa mendapatkan kombinasi kunci meta. Dengan yang dinyalakan, Alt+ bberfungsi seperti yang diharapkan.

Ian Griffiths
sumber
80

Terminal Mac OS X adalah BASH, inilah beberapa pintasan BASH:

Ctrl + A    Go to the beginning of the line you are currently typing on
Ctrl + E    Go to the end of the line you are currently typing on
Ctrl + L    Clears the Screen, similar to the clear command
Ctrl + U    Clears the line before the cursor position. If you are at the end of the line, clears the entire line.
Ctrl + H    Same as backspace
Ctrl + R    Lets you search through previously used commands
Ctrl + C    Kill whatever you are running
Ctrl + D    Exit the current shell
Ctrl + Z    Puts whatever you are running into a suspended background process. fg restores it.
Ctrl + W    Delete the word before the cursor
Ctrl + K    Clear the line after the cursor
Ctrl + T    Swap the last two characters before the cursor
Esc + T  Swap the last two words before the cursor
Alt + F  Move cursor forward one word on the current line
Alt + B  Move cursor backward one word on the current line
Tab      Auto-complete files and folder names

Yang Anda cari adalah Ctrl+ H. (Ini sama dengan menekan tombol backspace)

Jika Anda mencari karakter pelarian untuk kembali satu karakter, Anda mencari \b. Seperti dalam:

$ echo -e "one two\b\b\b\b three" # Will echo "one three"
Arko
sumber
25
Untuk membuat "Alt" binding berfungsi, pengguna harus mengaktifkan "Use option as meta" di Terminal . Ini akan menggantikan karakter tambahan berbasis-biasa dan kunci mati.
Chris Johnsen
6
Sidenote: Menggunakan alt sebagai meta key membuat banyak karakter yang dibutuhkan seperti @ [] | {} tidak dapat diakses pada banyak layout keyboard internasional seperti Jerman atau Austria. Anda dapat melompat maju atau mundur kata dengan menekan masing-masing ESC-f dan ESC-b. Untuk karakter tunggal, Anda dapat menggunakan tombol panah di sebagian besar kasus. Di Terminal.app: Preferensi> Pengaturan [Lanjutan] Anda dapat mencentang kotak untuk "Hapus kirim Ctrl-H" agar kunci penghapusan Anda berperilaku dengan benar di aplikasi seperti vim.
MacLemon
2
-1 Ini tidak menjawab pertanyaan. Chris Johnsen menjawab dengan benar, tetapi dalam komentar.
bentford
1
Perintah alt tidak berfungsi untuk saya Alt + F, dan Alt + B tidak berfungsi. Saya menjalankan bash
Shervin Asgari
@ MacLemon, yang menarik Esc + f dan Esc + b bekerja untuk saya, tapi saya tidak bisa menahan Esc dan menekan f atau b beberapa kali; 'f' atau 'b' dimasukkan pada penekanan berikutnya.
Kenny Evitt
10

Di mac UK saya, ALT + kursor kiri / kanan kembali / maju satu kata. Sangat esensial.

jmoz
sumber
6

Coba SS64 . Situs web ini sangat bagus untuk referensi baris perintah.

Pintasan Keyboard OS X CLI seperti yang diambil dari halaman SS64 ini .

Bash Keyboard Shortcuts

Moving the cursor:
  Ctrl + a   Go to the beginning of the line (Home)
  Ctrl + e   Go to the End of the line (End)
  Ctrl + p   Previous command (Up arrow)
  Ctrl + n   Next command (Down arrow)
   Alt + b   Back (left) one word
   Alt + f   Forward (right) one word
  Ctrl + f   Forward one character
  Ctrl + b   Backward one character
  Ctrl + xx  Toggle between the start of line and current cursor position

Editing:
 Ctrl + L   Clear the Screen, similar to the clear command
 Ctrl + u   Cut/delete the line before the cursor position.
  Alt + Del Delete the Word before the cursor.
  Alt + d   Delete the Word after the cursor.
 Ctrl + d   Delete character under the cursor
 Ctrl + h   Delete character before the cursor (backspace)
 Ctrl + w   Cut the Word before the cursor to the clipboard.
 Ctrl + k   Cut the Line after the cursor to the clipboard.
  Alt + t   Swap current word with previous
 Ctrl + t   Swap the last two characters before the cursor (typo).
 Esc  + t   Swap the last two words before the cursor.
 Ctrl + y   Paste the last thing to be cut (yank)
  Alt + u   UPPER capitalize every character from the cursor to the end of the current word.
  Alt + l   Lower the case of every character from the cursor to the end of the current word.
  Alt + c   Capitalize the character under the cursor and move to the end of the word.
  Alt + r   Cancel the changes and put back the line as it was in the history (revert).
 Ctrl + _   Undo

 TAB        Tab completion for file/directory names
For example, to move to a directory 'sample1'; Type cd sam ; then press TAB and ENTER. 
type just enough characters to uniquely identify the directory you wish to open.

History:
  Ctrl + r   Recall the last command including the specified character(s)
             searches the command history as you type.
             Equivalent to : vim ~/.bash_history. 
  Ctrl + p   Previous command in history (i.e. walk back through the command history)
  Ctrl + n   Next command in history (i.e. walk forward through the command history)
   Alt + .   Use the last word of the previous command
  Ctrl + s   Go back to the next most recent command.
            (beware to not execute it from a terminal because this will also launch its XOFF).
  Ctrl + o   Execute the command found via Ctrl+r or Ctrl+s
  Ctrl + g   Escape from history searching mode

Process control:
 Ctrl + C   Interrupt/Kill whatever you are running (SIGINT)
 Ctrl + l   Clear the screen
 Ctrl + s   Stop output to the screen (for long running verbose commands)
 Ctrl + q   Allow output to the screen (if previously stopped using command above)
 Ctrl + D   Send an EOF marker, unless disabled by an option, this will close the current shell (EXIT)
 Ctrl + Z   Send the signal SIGTSTP to the current task, which suspends it.
            To return to it later enter fg 'process name' (foreground).

Emacs mode vs Vi Mode    
All the above assume that bash is running in the default Emacs setting, if you prefer this can be switched to Vi shortcuts instead.

Set Vi Mode in bash:
$ set -o vi

Set Emacs Mode in bash:    
$ set -o emacs

Catatan: Untuk menggunakan Pintasan Tombol Alt >> Buka Preferensi Terminal >> Tab Pengaturan >> Keyboard >> Centang "Gunakan opsi sebagai kunci meta"

Preferensi Terminal

Rahul Thakur
sumber
1
"Gunakan opsi sebagai kunci meta" membuatnya berfungsi untuk saya.
cyber-monk
2

Anda ingin bagian READLINE dari bash(1)halaman manual:

man 1 bash
/^READLINE
Ignacio Vazquez-Abrams
sumber
1

Benar-benar tidak perlu memetakan optionkunci untuk meta, di Terminal OS X, option+ left-arrow, option+ right-arrowmenggantikan Alt+ Fdan Alt+ Bmasing-masing. Pintasan lain yang biasa digunakan semua berfungsi seperti yang diterapkan pada platform lain. escdapat meniru fungsi asli Alttombol, tetapi bisa sedikit tidak nyaman digunakan escsebagai pengubah, ditambah Anda tidak dapat menahan escdan berulang kali menekan Batau F, Anda harus membiarkannya dan mendorongnya kembali lagi setiap kali.

TL; DR

option+ left-arrow= kembali satu kata

option+ right-arrow= meneruskan satu kata

Dan Robson
sumber
The pilihan akord tidak bekerja di X Terminal OS saya.
Kenny Evitt
0

Anda mungkin tertarik pada profil saya: https://github.com/lingtalfi/mac-terminal-shortcuts

Ini memberikan pintasan (intuitif) berikut:

ALT-left: move one word backward
ALT-right: move one word forward
CTRL-left: move to the beginning of the line
CTRL-right: move to the end of the line
ALT-backspace: kill one word backward
ALT-del: kill one word forward
ALT-up: set word after cursor to uppercase
ALT-down: set word after cursor to lowercase
CTRL-backspace: Same as ALT-backspace
CTRL-del: Same as ALT-del
home: move to the beginning of the line
end: move to the end of the line
ling
sumber