Mengapa Ctrl-Arrow tidak berfungsi di bash di OS X?

15

Saya menggunakan Ctrl- dan Ctrl- pada setiap sistem Linux tempat saya bekerja, tetapi kombinasi tombol ini tidak berfungsi secara bash pada Macbook Pro saya. Ini menjalankan Snow Leopard, dan saya menggunakan aplikasi Terminal bawaan.

Kombinasi tombol tampaknya tidak ditangkap oleh apa pun sebelum atau oleh Terminal, karena jika saya ssh ke salah satu server Linux saya, saya dapat menggunakan Ctrl- / untuk melompat ke kata berikutnya / sebelumnya pada baris perintah. Namun, ketika saya mencoba kombinasi tombol ini di bash di Macbook saya, saya hanya mendapatkan "C" untuk panah kanan dan "D" untuk panah kiri.

Ada ide tentang bagaimana saya bisa mendapatkan kunci ini untuk bekerja di darwin bash?

Ryan Olson
sumber
2
Jika Anda menggunakan Spaces, Ctrl + panah secara default beralih spasi.
mark4o
1
Serupa
Dijeda hingga pemberitahuan lebih lanjut.

Jawaban:

13

OS X menggunakan kunci emacs yang mengikat default saya. Ini benar bahwa hampir setiap aplikasi pada OS X, itu agak bagus. Ini berarti hal-hal seperti Ca dan Ce adalah awal / akhir dari garis. Anda juga mendapatkan kata-kill-backward bagus dengan M-backspace, oh, dan kill-line dengan Ck.

Ini harus berarti bahwa di terminal Anda maju / mundur-kata terikat masing-masing ke Mf dan Mb (M = Meta = alt / option), namun itu tidak terjadi. Pada OS X maju / backword-word terikat ke M- → dan M- ← secara default.

Anda dapat mengubah perilaku ini dengan mengubah cara GNU Readline Library dikonfigurasi untuk akun Anda. Ini terjadi di ~/.inputrcfile Anda . Anda bisa mendapatkan daftar besar perintah yang mengikat dengan man readlineserta dalam dokumentasi online seperti ini di sini. .

Jadi untuk menjawab pertanyaan Anda, Anda ingin memetakan apa yang dilakukan Readline ketika ia melihat C- → dan C- do untuk melakukan apa yang dilakukan pada server linux Anda.

Sintaks untuk ~/.inputrcfile cukup sederhana untuk apa yang ingin Anda lakukan: key-sequence: action.

Ini harus menjadi apa yang Anda butuhkan untuk mendapatkan perilaku yang diinginkan:

"\e[5C": forward-word
"\e[5D": backward-word

Inilah halaman lain dengan binding berguna tambahan.

(Anda mungkin bisa menyalin / etc / inputrc dari kotak linux ke OS X ~ / .inputrc Anda)

Tim Bielawa
sumber
Catatan: Jika Anda sering menggunakan tmux dengan kunci xterm, Anda juga perlu \e[1;5Cdan \e[1;5Djuga memicu forward-worddan backward-word.
Arne
2
Catatan lain: Jika masih tidak berfungsi, itu mungkin karena konflik jalan pintas dengan Mission Control / Spaces. System Preferences -> Keyboard -> Shortcuts -> Mission Control, Gerakkan kiri / kanan spasi
bhh1988
Saya tidak mengerti "OS X menggunakan pengikatan kunci emacs secara default." "Ctrl-panah" juga merupakan pengikatan kunci emacs.
Greg
3

masukkan ~/.inputrcbaris berikut:

"\e[5C": forward-word
"\e[5D": backward-word
cekcok
sumber
0

Hari-hari ini tampaknya bahwa urutan melarikan diri yang keluaran Ctrl-Arrows di terminal telah berubah. Inilah yang bekerja untuk saya pada hari ini (akhir 2018):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Catatan: Anda selalu dapat mengetahui urutan pelarian aktual dengan mengetikkan cat -vTerminal, dan menekan Ctrl-Left Arrow atau Ctrl-Right Arrow. Ini adalah contoh keluaran untuk Ctrl-Left Arrow saya sendiri:

^[[1;5C ^[[1;5C

Untuk menerjemahkan ke dalam .inputrcistilah, ganti tanda keluar ^[dengan \edan tempelkan hasilnya di dalam tanda kutip ganda.

DomQ
sumber
0

Seperti @ bhh1988 sebutkan, konfigurasi Mission Control mencegah Ctrl-Keys bekerja dengan tombol panah bash. Saya tidak ingin mengganggu pintasan tersebut, jadi saya menggunakan tombol Option (Alt) sebagai gantinya. Saat ini di Mojave menggunakan keyboard Jerman (tidak tahu apakah itu relevan) Saya memasukkan yang berikut ini .inputrcuntuk menggunakan Option-left-arrow dan Option-right-arrow untuk berpindah kata.

"\e\e[C": forward-word
"\e\e[D": backward-word
Peter Evans
sumber
0

UPDATE Jan 2020

Pada versi terbaru OSX, shell standarnya adalah zsh. Oleh karena itu mantra sihir untuk mendapatkan ctrl-arrowleft dan ctrl-arrowright berfungsi seperti yang diharapkan adalah sebagai berikut:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(letakkan di Anda .zshrc)

Fergie
sumber