Aktifkan alt / ctrl + kiri / kanan pada baris perintah CentOS

7

Hoster saya baru-baru ini diperbarui ke CentOS baru dan saya telah 'mempersonalisasikan' itu dan sekarang saya kehilangan sesuatu.

Di Server Ubuntu rumah saya, saya bisa forward-word dan backward-word dengan ALT + KANAN / KIRI . Saya tidak melakukan apa pun untuk itu. aku juga bisa ALT + MENGHAPUS untuk menghapus kata.

Di CentOS baru saya, saya bisa melakukannya ALT + MENGHAPUS , tapi saya tidak bisa mendapatkan ALT + KANAN / KIRI kerja! ALT + B / F bekerja, tapi itu tidak dapat diterima, karena hanya berfungsi untuk kiri ALT dan jari-jariku tidak terlalu ramping. (kanan ALT + B / F cetak saja "b" atau "f")

Saya sudah mencoba menyalin bagian dari / etc / inputrc ke CentOS, tetapi itu tidak melakukan apa-apa.

ALT atau CTRL Saya tidak peduli, tetapi saya benar-benar membutuhkan jalan pintas. CentOS terakhir tidak memilikinya, tetapi sejak Ubuntu saya telah melewatkannya di CentOS.

CentOS saya /etc/inputrc:

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

Ubuntu saya /etc/inputrc:

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

Aku bahkan tidak tahu apa artinya semua itu !? apa yang [1;5C untuk kunci ??

Rudie
sumber
Saya hanya menggunakan 2 baris pertama ( \e[1;5C dan \e[1;5D ) Anda mengutip dari inputrc Ubuntu Anda di my ~/.inputrc dan itu berfungsi dengan baik untuk debian, ubuntu dan arch.
terdon
Untuk ALT atau CTRL? Karena mereka ada di sana, mereka seharusnya bekerja, bukankah begitu? Mereka berdua harus B dan F, Saya akan berpikir. Linux itu aneh.
Rudie
Mereka bekerja untuk CTRL. Saya kira adalah bahwa urutan itu penting, yang satu dapat menimpa yang lain. Juga, file pengaturan lokal (mis. ~/.inputrc ) diutamakan daripada yang di seluruh sistem, jadi jika ada konflik aneh di suatu tempat file lokal mungkin memperbaikinya
terdon

Jawaban:

8

Berkat pertanyaan Anda, akhirnya saya membaca dan meningkatkan pemahaman saya, tepuk tangan!

Jadi, sumber informasi yang sangat bagus adalah man readline. Ikatan kunci ditentukan dalam berbagai inputrc file mengontrol cara perpustakaan BASH readline bekerja. Menurut halaman manual readline Anda dapat menggunakan nama kunci simbolis atau urutan melarikan diri:

   Key Bindings
       The syntax for controlling key bindings in the inputrc file is
       simple.  All that is required is the name of  the  command  or
       the  text  of a macro and a key sequence to which it should be
       bound. The name may be specified in one of two ways: as a sym‐
       bolic  key  name, possibly with Meta- or Control- prefixes, or
       as a key sequence.  The name and key sequence are separated by
       a  colon.  There can be no whitespace between the name and the
       colon.

       When using the form keyname:function-name or macro, keyname is
       the name of a key spelled out in English.  For example:

              Control-u: universal-argument
              Meta-Rubout: backward-kill-word
              Control-o: "> output"

Halaman manual juga menyatakan bahwa file konfigurasi default adalah ~/.inputrc jadi saya sarankan menempatkan binding Anda di sana.

Jika Anda ingin menggunakan tombol huruf normal (misalnya Kontrol - g ), Control-g: forward-word bekerja dengan baik. Tombol panah lebih sulit. Saya mencoba, dan gagal, untuk menemukan kuncinya nama untuk tombol panah. Tidak ada yang saya coba ( left-arrow, left, :left ) bekerja sehingga sepertinya kita terjebak dengan urutan pelarian.

Sayangnya, urutan escape yang tepat berbeda di antara emulator terminal (itulah mengapa inputrc Ubuntu Anda memiliki beberapa baris). Untuk mengetahui urutan pelarian mana yang digunakan terminal favorit Anda, jalankan read lalu ketik urutan tombol yang Anda minati. Di terminator, xterm dan gnome-terminal, Kontrol - Kiri memberikan:

$ read
^[[1;5D

di aterm:

$ read
^[Od    <-- that is a capital O not a zero (0).

Dengan bereksperimen sedikit, saya menemukan itu ^[[D aku s Kiri dan ^[[1;5D aku s Kontrol - Kiri . Pertama ^[ adalah ESC kunci, digunakan di sini, saya kira, untuk menunjukkan suatu urutan pelarian .

Bagaimanapun, untuk mengikat Kontrol - Kiri untuk forward-word dengan cara yang bekerja untuk semua, saya menambahkan baris ini ke ~/inputrc:

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

Untuk alasan saya belum sepenuhnya mengerti, Kontrol diwakili oleh \e yang harus menjadi ESC .

Akhir saya ~/.inputrc File yang berfungsi untuk semua terminal yang tercantum di atas adalah:

"\e[1;5D": backward-word
"\eOd": backward-word
"\e[1;5C": forward-word
"\eOc": forward-word
terdon
sumber
1
YA YA YA! Anda adalah pahlawan absolut saya! Sempurna sekarang! Keyboard kecil saya sekarang menggunakan panah ctrl + kanan dan keyboard utama / desktop saya sekarang menggunakan tombol alt + panah kiri. Sempurna!! Entah bagaimana alt kanan keyboard udara saya tidak memicu apa pun di read... Mungkin kesalahan keyboard (beberapa fungsi khusus !?) Luar biasa! Anda pria itu!
Rudie
Pengaturan saya agak berbeda btw: ctrl kiri / kanan: \eOD / \eOC dan alt kiri / kanan: \e\e[D / \e\e[C. Terima kasih Tuhan itu sintaks yang bisa dibaca dan masuk akal seperti ini, kan !? Batu Linux!
Rudie
Ya, harus mengakui sintaks bisa lebih baik, mungkin peninggalan sejarah. Senang itu berhasil!
terdon
1

Cara melakukannya di Iterm2 sehingga berfungsi saat Anda terhubung ke host apa pun.

Catatan: Saya hanya menulis ini karena, pertanyaan lain ( https://superuser.com/questions/1042937/getting-ctrlarrows-to-move-word-at-a-time-on-newest-iterm2?rq=1 ) telah menautkan ke pertanyaan ini sebagai duplikat, tetapi pertanyaan ini tidak menjawab bagaimana melakukan ini di Iterm2, jadi itu bukan duplikat.

Jika Anda menggunakan OS X dan menggunakan Iterm2, Anda dapat memetakan Alt / Ctrl + → (panah kanan) dan Alt / Ctrl + ke perintah readline standar Meta + F dan Meta + B . Dalam contoh di bawah ini, diasumsikan bahwa kunci keluar adalah meta. Untuk melakukan ini, buka Iterm2.

  1. Klik: Menu - & gt; Preferensi ...
  2. Klik tab "Profil".
  3. Klik profil Anda atau yang standar.
  4. Klik subtab "Tombol".
  5. Klik tanda "+" plus di sebelah "Muat Preset ..."
  6. Ketikkan pintasan keyboard Anda di bidang pertama (mis., Ctrl + )
  7. Pilih "Kirim Teks", "Kirim Hex" (lebih lanjut tentang mengirim Hex di "Cara mengikat urutan tombol ke tombol kontrol" di bawah) atau "Kirim Escape Escape". Dalam hal ini kami menggunakan "Send Escape Sequence".
  8. Di bidang terakhir pilih karakter yang dapat ditafsirkan oleh readline
  9. ^[ adalah urutan readline untuk melarikan diri. Entri ini memetakan Memilih + untuk ESC + F (mungkin Alt + F di terminal lain)

key mapping window example

Cara memetakan jalan pintas ke urutan yang tidak bisa dilepaskan ( Ctrl , Alt , Cmd , dll.)

  1. Unduh "Kode Kunci" dari app store. Instal dan buka.
  2. Sementara di jendela Kode Kunci terbuka, tekan tombol Ctrl + [beberapa kunci] , dalam hal ini saya akan gunakan Ctrl + W untuk menghapus kata sebelumnya di readline.
  3. Perhatikan bidang "Unicode".
  4. Sekarang petakan urutan kunci Anda menggunakan iterm, preferensi- & gt; Keys- & gt; + (urutan yang disediakan di atas).
  5. Masukkan bidang "Pintasan Keyboard" seperti pada situasi ini Memilih + Menghapus .
  6. Ubah "Aksi" menjadi "Kirim Kode Hex".
  7. Masukkan bidang terakhir hex yang sebelumnya dicatat; pada kasus ini, 23 / 0x17.
  8. Klik "OK" dan pintasan sekarang harus operasional di jendela terminal Anda dan bekerja pada sistem apa pun di mana readline tersedia.
N D
sumber
0

Terima kasih untuk pertanyaannya. Punya masalah ini dengan Putty pada CentOS 7 dan diselesaikan dengan menambahkan ini di dalam $if mode=emacs bersyarat:

# for PuTTY
"\e\e[C": forward-word
"\e\e[D": backward-word

Mengaktifkan pengaturan dengan Ctrl + X kemudian Ctrl + R

Walf
sumber