iTerm 2: Cara mengatur pintasan keyboard untuk melompat ke awal / akhir baris?

395

Saya bisa melihat bahwa Ctrl+ left/ rightmelompat ke awal / akhir baris. Bagaimana cara mengubahnya ke Cmd+ left/ right arrow?

Untuk mendapatkan Alt+ left/ right arrowbekerja dengan benar untuk kata melompat ikuti artikel ini .

chris
sumber
1
Jika Anda ingin pintasan itu juga berfungsi di VIM, lihat jawaban ini: stackoverflow.com/a/9611698/991068
Razvan Grigore

Jawaban:

735

Tambahkan di iTerm2 Tombol Pintasan Profil berikut

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

Berikut ini visual untuk mereka yang membutuhkannya

Ini menambahkan kunci visual

Matthias
sumber
3
Apakah Anda tahu kode / urutan untuk Command + Delete itu? (kosongkan prompt)
Steven Lu
10
Saya menjawab komentar pertama saya di tempat lain, pada dasarnya hex-code 0x15 memberikan Ctrl + U yang membersihkan baris. Namun saya menemukan 0x01 Ctrl + A untuk mengganggu penggunaan Tmux. Karenanya saya bermaksud memetakannya sebagai tombol Home (fungsi yang sama seperti Fn + Left pada keyboard Mac).
Steven Lu
7
Urutan escape untuk Home adalah [1 ~ dan sequence escape untuk End adalah [4 ~
Steven Lu
3
Bekerja seperti pesona, luar biasa!
Juto
25
Ikatan yang benar adalah ⌘← "SEND ESC SEQ" OHuntuk Home dan ⌘→ "SEND ESC SEQ" OFuntuk End (itu huruf besar 'bukan nol). Ini mensimulasikan sebenarnya menekan tombol Home dan End, dan dengan demikian akan bekerja dalam bash, vim, dll.
Timothy Zorn
433

Untuk melompat di antara kata-kata dan mulai / akhir baris di iTerm2 pilih salah satu dari dua solusi di bawah ini.

1. Solusi sederhana (disarankan)

  1. Buka Preferensi
  2. Klik tab "Profil"
  3. Pilih profil dalam daftar di sebelah kiri (mis. "Default") dan klik tab "Keys"
  4. Klik downdown "Preset" dan pilih "Natural Text Editing"

masukkan deskripsi gambar di sini


2. Memetakan kunci secara manual (Lanjutan)

Jika Anda tidak ingin menggunakan preset "Natural Text Editing" yang disebutkan di atas, Anda dapat memetakan kunci yang Anda butuhkan secara manual:

  1. Buka Preferensi
  2. Klik tab "Tombol"
  3. Klik [+]ikonnya

Anda sekarang dapat menambahkan pintasan keyboard berikut:

Pindahkan kursor satu kata ke kiri

  • Pintasan keyboard: +
  • Tindakan: Kirim Kode Hex
  • Kode: 0x1b 0x62

masukkan deskripsi gambar di sini

Pindahkan kursor satu kata ke kanan

  • Kombinasi Keyboard: +
  • Tindakan: Kirim Kode Hex
  • Kode: 0x1b 0x66

Pindahkan kursor ke awal baris

  • Kombinasi Keyboard: +
  • Tindakan: Kirim Kode Hex
  • Kode: 0x01

Pindahkan kursor ke ujung baris

  • Kombinasi Keyboard: +
  • Tindakan: Kirim Kode Hex
  • Kode: 0x05

Hapus kata

  • Kombinasi Keyboard: +←Delete
  • Tindakan: Kirim Kode Hex
  • Kode: 0x1b 0x08

Hapus baris

  • Kombinasi Keyboard: +←Delete
  • Tindakan: Kirim Kode Hex
  • Kode: 0x15

Batalkan

  • Kombinasi Keyboard: +z
  • Tindakan: Kirim Kode Hex
  • Kode: 0x1f

Jangan lupa untuk menghapus ikatan sebelumnya :

  • Buka tab "Profil"
  • Klik sub-tab "Tombol"
  • Hapus pemetaan untuk kombinasi tombol + dan +
sqren
sumber
2
Ini bekerja dengan baik untuk saya di iTerm2 dan sangat mudah diikuti, terima kasih!
Natetronn
3
Hanya mengklarifikasi apa yang dilakukan ikatan asli untuk b ←? Saya melihatnya Says send Hex Codes: 0x1b 0x1b 0x5b 0x44. Akan baik untuk mengetahui kalau-kalau orang tidak ingin menghapus ini.
Agustus
5
Lompat ke awal dan akhir baris tidak berfungsi untuk saya menggunakan zsh. Menggunakan "Kode Hex" "0x01" / "0x05", seperti yang disarankan oleh jawaban teratas bekerja untuk saya.
Balik
2
Melompat ke awal dan akhir baris tidak bekerja untuk saya juga. Jawaban teratas berhasil.
hisabimbola
3
Apakah iTerm memiliki cara untuk menggabungkan ini ke dalam preset yang bisa kita muat? Tampaknya menjengkelkan untuk mengetik secara manual tetapi ini bekerja untuk saya dan itu mengagumkan. Terima kasih ya!
Agustus
259

Saya melihat ada banyak jawaban bagus sudah, tetapi ini harus memberikan yang paling dekat dengan fungsionalitas OSX asli mungkin lebih dari sekedar shell Anda. Saya memverifikasi bahwa ini berfungsi dalam ZSH, Bash, node, python -i, iex dan irb / pry sesi (menggunakan permata rb-readline untuk readline, tetapi harus bekerja untuk semua).

Buka preferensi ITerm + ,dan navigasikan ke Profilestab ( Keystab tersebut dapat digunakan, tetapi menambahkan pengikat tombol ke profil Anda memungkinkan Anda untuk menyimpan profil Anda dan menyinkronkannya ke beberapa komputer) dan keyssub-tab dan masukkan yang berikut ini:

Hapus semua karakter yang tersisa dari kursor

+ ←DeleteKirim Kode Hex:

0x15Lebih kompatibel, tetapi fungsionalitas kadang-kadang adalah untuk menghapus seluruh baris daripada hanya karakter di sebelah kiri kursor. Saya pribadi menggunakan ini dan kemudian menimpa zsh bindkey saya untuk ^Umenghapus hanya hal-hal di sebelah kiri kursor (lihat di bawah).

atau

0x18 0x7fKurang kompatibel, tidak bekerja di simpul dan tidak akan bekerja di zsh secara default, lihat di bawah untuk memperbaiki zsh (bash / irb / pry harus baik-baik saja), melakukan fungsi yang diinginkan ketika itu bekerja.

Hapus semua karakter di kanan kursor

+ fn+ ←Deleteatau + Delete→Kirim Kode Hex:0x0b

Hapus satu kata di sebelah kiri kursor

+ ←DeleteKirim Kode Hex:

0x1b 0x08 Istirahat di Ix Elixir, tampaknya berfungsi dengan baik di tempat lain

atau

0x17 Berfungsi di mana-mana, tetapi tidak berhenti pada pemutusan kata normal di IRB dan sebagai gantinya akan menghapus sampai ia melihat ruang literal.

Hapus satu kata di kanan kursor

+ fn←Deleteatau + Delete→Kirim Kode Hex:0x1b 0x64

Pindahkan kursor ke garis depan

+ Kirim Kode Hex:0x01

Pindahkan kursor ke ujung garis

+ Kirim Kode Hex:0x05

Pindahkan kursor satu kata ke kiri

+ Kirim Kode Hex:0x1b 0x62

Pindahkan kursor satu kata ke kanan

+ Kirim Kode Hex:0x1b 0x66

Batalkan

+ zKirim Kode Hex:0x1f

Mengulang biasanya tidak terikat dalam bash, zsh atau readline, jadi kita dapat mengaturnya ke hexcode yang tidak terpakai yang kemudian dapat kita perbaiki di zsh

+ + Zatau + yKirim Kode Hex:0x18 0x1f

Sekarang bagaimana cara memperbaiki yang tidak berfungsi

Untuk zsh, Anda dapat mengatur ikatan untuk + yang belum berfungsi ←Deletedan + + Z/ + ydengan menjalankan:

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

Saya tidak dapat menemukan solusi untuk menambahkan pengulangan di bash atau readline, jadi jika ada yang tahu solusi untuk salah satu dari itu, silakan komentar di bawah ini dan saya akan mencoba menambahkannya.

Bagi siapa pun yang mencari tabel pencarian tentang cara mengubah urutan kunci ke hex, saya menemukan tabel ini sangat membantu.

Travis
sumber
2
Itu sangat berguna, membuat banyak perbedaan! Saya ingin menunjukkan bahwa beberapa orang dapat menjadi bingung dengan $di depan echo(hapus saja?). Selain itu, itu sempurna. Terima kasih.
edmundo
1
@Christophe Jadi sepertinya ada ikatan seperti yang seharusnya. Entah Anda membuat kesalahan dengan menambahkan nilai hex di atau pengikat tombol untuk kata mundur sedang ditimpa. Jalankan bindkey | grep "\^\[b"dan itu akan memberi tahu Anda jika ada sesuatu yang menimpa setelah ditetapkan. Ini harus hanya kembali #=> "^[b" backward-word. Jika ditimpa, Anda harus menemukan di mana ditimpa dan menghapusnya. Jika itu tidak memungkinkan, Anda dapat menjalankannya echo 'bindkey "^[b" backward-word' >> ~/.zshrcdan akan menambahkannya ke baris terakhir Anda .zshrc, kemudian restart iTerm dan itu akan berfungsi
Travis
2
@Christophe periksa keystab di preferensi iTerm untuk melihat apakah itu juga memetakan + ke sesuatu. Jika demikian hapus. Anda dapat menguji apakah Anda bbekerja dengan benar dengan menekan dengan cepat escmelepaskan, lalu menekan b. Seharusnya melompat satu kata ke kiri. Atau, Anda dapat memetakan + ke hex 0x1b 0x42 atau 0x1b 0x5b 0x31 0x3b 0x35 0x44 . Saya memverifikasi bahwa keduanya berfungsi untuk saya. Saya benar-benar berpikir Anda telah + ditimpa di iTerm, baik di profile keystab atau keystab Anda.
Travis
3
Luar biasa! Baru belajar tentang Undo plus Redo binding dari sini.
ecbrodie
3
Saya melakukan ini secara manual dan saya pikir mengapa saya tidak dapat mengimpor profil untuk melakukan ini? Kemudian saya membuat profil GabLeRoux / iterm2-macos-dynamic berdasarkan instruksi ini. Ini berfungsi dengan sempurna, terima kasih 🍻
GabLeRoux
48

Ikuti tutorial yang Anda sebutkan di atas untuk mengatur preferensi utama Anda di iterm2 .

  1. Buat kunci shorcut baru
  2. Pilih "Kirim urutan pelarian" sebagai tindakan
  3. Kemudian, untuk mengatur cmd-kiri , dalam teks di bawah ini:
    • Masukkan [Huntuk memulai garis
      ATAU
    • Masukkan [Funtuk akhir baris
Jaime Bellmyer
sumber
1
F melompat hanya satu kata di iterm2 saya
Matthias
1
ITerm => Preferensi => Tombol
pfrank
Suka ini! solusi lain tidak berhasil untuk saya. Saya Menghabiskan berjam-jam frustrasi bahwa saya tidak bisa menggunakan ctrl + a dan ctrl + e di iterm2. Tapi saya tidak mau menyerah begitu saja. Ini benar-benar berfungsi, terima kasih!
FLY
Solusi lain tidak bekerja untuk saya juga, tetapi yang ini berhasil.
Braham Snyder
42

Di iTerm 3.0.12 Anda dapat beralih ke Natural Text Editingpreset:

masukkan deskripsi gambar di sini

ITerm → Preferensi → Profil → Kunci

Peringatan Karena ini adalah preset, ia dapat menimpa kunci yang telah Anda ikat sebelumnya. Jadi lebih baik menyimpan bindings kunci Anda saat ini sebelum menerapkan preset.

Nik Kov
sumber
2
Bisakah Anda menguraikan lebih lanjut jawaban Anda? Seperti pada, apa yang termasuk dalam pengaturan dan mungkin ditimpa?
Carles Alcolea
Terima kasih atas jawabannya. Juga membahas kemungkinan praktik terbaik untuk menerapkan ini ke profil kustom Anda sendiri sehingga Anda tidak mengacaukan default dan dapat beralih profil sebagai "mode" pengeditan teks alami
Agustus
29

Untuk referensi cepat siapa pun yang ingin pergi ke akhir baris atau mulai baris di iTerm2, tautan di atas http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html mencatat bahwa di iTerm2:

  • Ctrl+ A, melompat ke awal baris, sementara
  • Ctrl+ E, melompat ke ujung garis.
Ioannis Filippidis
sumber
Mengapa jawaban ini tidak ada di atas?
Gangadhar JANNU
1
@ GangadharJannu: Sepenuhnya setuju. Langsung ke ans. Harus di atas.
Catbuilts
10

Saya menggunakan jawaban Travis dan saya membuat profil dinamis yang dapat Anda impor berdasarkan instruksinya.

GabLeRoux / iterm2-macos-dynamic-profile

Petunjuk ada di readme dan jauh lebih cepat untuk mengimpor ini daripada menambahkannya secara manual. Saya membuat jawaban ini sesuai permintaan @ gooli karena ini disembunyikan dalam komentar. Semoga Anda menikmati ini 🍻

GabLeRoux
sumber
2
Kembali ke sini setahun kemudian dan sangat senang menemukan ini!
Elifiner
9

Hanya untuk membantu siapa pun yang memiliki masalah yang sama tetapi secara khusus menggunakan Zsh shell dengan iTerm 2. Ternyata Zsh tidak membaca /etc/inputrcdengan benar , sehingga gagal memahami ikatan utama apa pun yang Anda atur melalui preferensi!

Untuk memperbaiki ini, Anda perlu menambahkan beberapa binding kunci ke .zshrcfile Anda , seperti:

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

Perhatikan garis miring terbalik pada contoh di atas sebelum "e", artikel tertaut tidak menunjukkannya, jadi tambahkan mereka ke .zshrcfile Anda saat menambahkan binding.

Nerdwood
sumber
4

Binding emacs mode lama masih bisa bekerja di terminal iterm2 dan os x:

Preferensi -> Profil -> Tombol (sub tab dalam profil)

  • Set Left/Right option <kbd>⌥</kbd> key acts as +Esc(mirip di os x terminal)

Ini harus memungkinkan alt- fdan alt- buntuk memindahkan kata demi kata. (Masih ctrl- adan ctrl- eselalu bekerja seperti biasa)

Jika diatur sebagai metabinding lama itu akan berfungsi sementara beberapa binding iterm2 tidak tersedia.

setengah
sumber
2

Seperti Menjelaskan di sini , Anda dapat melakukannya dengan langkah-langkah sederhana:

Secara default, lompatan kata (opsi + → atau ←) dan penghapusan kata (opsi + spasi mundur) tidak berfungsi. Untuk mengaktifkannya, buka "ITerm → Preferensi → Profil → Kunci → Muat Preset ... → Pengeditan Teks Alami → Boom! Head meledak

Islam. Ibrahim
sumber
2

Satu-satunya hal yang berhasil untuk pindah ke awal dan akhir baris adalah

⌘← "SEND ESC SEQ" OH- untuk pindah ke awal baris
⌘→ "SEND ESC SEQ" OF- untuk pindah ke akhir baris

add787
sumber
1

bind -p akan menampilkan daftar kunci lolos yang terikat di shell Anda, yang mungkin membantu memberi Anda lebih banyak ide / istilah pencarian.

Jose Alban
sumber
5
bind -phanya bekerja di shell Bourne (bash, sh) untuk zsh, csh tcsh, gunakan bindkey.
Travis
0

Bagi saya, kombinasi berikut berfungsi:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

Halil Özgür
sumber