Ohmyzsh: Tidak dapat menggunakan kunci home/end setelah menginstal oh-my-zsh

Dibuat pada 26 Agu 2014  ·  50Komentar  ·  Sumber: ohmyzsh/ohmyzsh

Saya menggunakan Ubuntu:14.04 env murni.
Setelah saya menginstal oh-my-zsh dengan curl.
Saya tidak dapat menggunakan kunci home/end lagi.
Saya tidak mengubah pengaturan apa pun di folder .oh-my-zsh.

Linux testers needed

Komentar yang paling membantu

@linlinlinlin Masalah ini secara default zsh tidak memiliki ikatan kunci untuk kunci Home dan End. Coba gunakan perintah berikut untuk mengatur binding:

bindkey "\033[1~" awal baris
bindkey "\033[4~" akhir baris

Semua 50 komentar

Perlu lebih banyak orang untuk mengonfirmasi ini

Tidak ada di pihak saya, baik di server atau desktop env. Butuh info lebih lanjut.

Bagaimana saya bisa membantu memeriksa masalah ini?
Semua bekerja dengan baik di lingkungan Anda?

Apakah masalah tetap ada saat Anda mengganti shell?

chsh -s /bin/bash

Saya menemukan masalah ini hanya terjadi ketika saya menggunakan klien windows seperti Putty untuk terhubung ke Host.
Jika menggunakan terminal di Ubuntu:14.04 itu berfungsi dengan baik dengan kunci home dan end .
Tetapi jika saya menggunakan klien SSH untuk menghubungkan server SSH, itu akan mengalami masalah ini.

Jika saya mengubah kembali ke bash . Ini bekerja dengan baik baik di terminal Linux atau dari klien Windows.
Mengapa?

Saya memiliki masalah yang sama pada Debian 7.6 ketika terhubung ke SSH dari Windows menggunakan Putty: kunci [Home] tampaknya tidak melakukan apa-apa dan kunci [End] menghasilkan ~ .

Lebih aneh (bagi saya) adalah keduanya berfungsi dengan baik (memindahkan kursor ke awal dan ke akhir baris) ketika berada di dalam sesi screen .

Dapat mengonfirmasi pada Mageia GNU/Linux, tetapi saya menduga ini adalah inkonsistensi Zsh yang lebih luas, bukan hanya karena oh-my-zsh.

Di laptop Mageia saya di Zsh dalam TTY murni, tombol [End] dan [Home] berfungsi dalam mode emacs, tetapi tidak dalam mode _vi_. Di Konsole (emulator terminal KDE) mereka tidak berfungsi dengan baik di Zsh sama sekali.

Tombol [Hapus] juga hanya berfungsi setelah saya menambahkan

bindkey '^[[3~' delete-char

Dalam kedua kasus, kuncinya berfungsi dengan baik di Bash.

Saya dapat mengonfirmasi bahwa tombol HOME dan END tidak berfungsi pada MACOS Yosemite 10.10.3. Tombol Beranda menggulir layar konsol ke baris pertama keluaran dan Akhir menggulir ke baris terakhir pada keluaran.

Ini terlihat mirip dengan #3757.

Sebelum membahas ini lebih jauh, alangkah baiknya untuk mencari tahu, dalam urutan itu:

  • menurut kalian bagaimana seharusnya perilaku tombol Home dan End;
  • apa yang sebenarnya terjadi;
  • dan mengapa.

Bagi Anda yang berpikir itu harus berfungsi (Beranda ke awal baris, Akhir hingga akhir baris), itu mungkin tergantung pada OS/desktop-env/term-emulator Anda.

Vanilla Zsh tidak menyediakan pengikatan apa pun untuk kunci Beranda dan Akhir. FYI, pintasan terminal yang biasa untuk awal dan akhir baris berturut-turut adalah Ctrl+A dan Ctrl+E.

Misalnya, perilaku yang dialami @damijanc benar. Melompat ke awal atau akhir output terminal adalah apa yang seharusnya dilakukan oleh Home dan End di Terminal.app yang dikonfigurasi secara default dengan vanilla Zsh dan OMZ tanpa plugin.

Jika Anda benar-benar ingin Beranda dan Akhir memindahkan kursor ke awal atau akhir baris, Anda dapat menggunakan pengaturan emulator terminal Anda untuk mengikatnya ke ^A dan ^E.


Bagi Anda yang dulunya berfungsi tetapi tidak lagi, maka jika itu kesalahan OMZ berarti perilakunya rusak oleh pembaruan tertentu. Dalam hal ini, tolong bantu kami melacak pembaruan itu, menggunakan git bisect atau sesuatu.

@ncanceill Tampaknya OMZ menyetel kunci home dan end untuk berperilaku seperti ini secara default: https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/key-bindings.zsh#L37

Namun, kunci tersebut mungkin tidak disetel di $terminfo yang dapat menyebabkan masalah di sini. Sebaiknya setiap pengguna yang mengalami masalah ini untuk menjalankan autoload zkbd dan mengikuti langkah-langkah di zkbd . Sumber file yang dihasilkan dan kemudian ikat sesuai keinginan Anda.

Ngomong-ngomong soal; apakah OMZ memuat file dari ~/.zkbd/ ?

@damijanc bisakah Anda memberikan output infocmp ?

Ini infocmp saya

  # Reconstructed via infocmp from file: /lib/terminfo/x/xtermxterm|xterm-debian|X11 terminal emulator, am, bce, km, mc5i, mir, msgr, npc, xenl,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG,
ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
ind=^J, indn=\E[%p1%dS, invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~, kEND=\E[1;2F,
kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~,
kPRV=\E[5;2~, kRIT=\E[1;2C, kb2=\EOE, kbs=\177, kcbt=\E[Z,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q,
kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~,
kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,
kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~,
kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S,
kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~,
kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~,
kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q,
kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~,
kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,
kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,
kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q,
kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, khome=\EOH, kich1=\E[2~,
kind=\E[1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, meml=\El,
memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
rin=\E[%p1%dT, rmacs=\E(B, rmam=\E[?7l, rmcup=\E[?1049l,
rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m,
rs1=\Ec, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smcup=\E[?1049h,
smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
vpa=\E[%i%p1%dd,

@linlinlinlin Dalam kasus Anda, ini tampaknya menjadi masalah umum dengan dempul, dapatkah Anda memberikan string tipe terminal yang dikonfigurasi untuk digunakan dempul? Apakah mengikuti http://superuser.com/a/104016 ini membantu?

@jgrar Di xterm ke Putty . Berhasil.

Tapi sebenarnya saya menggunakan XShell di Windows. Opsi tipe terminal di XShell adalah _xterm/vt100/vt102/vt220/vt320/linux/scoansi/ansi_. Saya tidak tahu apa yang harus saya ketik untuk XShell.

Beberapa pertanyaan lagi:

  • Mengapa bash tidak harus mengubah tipe terminal di sisi klien?
  • apakah mungkin untuk mengubah pengaturan di server untuk mengatasi masalah ini? Alih-alih mengubah opsi klien di setiap sisi klien.

@linlinlinlin

  • Sesuai pemahaman saya, menyetel tipe ke _linux_ seharusnya berfungsi, jika tidak, dapatkah Anda mencoba semuanya dan melaporkan kembali?
  • Saya tidak tahu apa yang bash lakukan secara berbeda dengan zsh dalam hal ini, tetapi saya sedang menyelidikinya
  • String tipe terminal yang diberikan klien kepada server menunjukkan database terminfo mana yang akan digunakan, jadi Anda perlu memastikan bahwa Anda mengatur klien Anda dengan benar, dalam hal ini menyediakan string tipe terminal terbaik.

Menurut pendapat saya; jika menggunakan bash di kunci peta dempul seperti yang Anda harapkan tetapi menggunakan ZSH & OMZ di dempul tidak (dapatkah Anda mengonfirmasi itu?), maka kita dapat membandingkan perbedaan pada dua titik ini dan harus dapat menemukan perbaikan. Saya sedang menyelidikinya saat ini karena saya memiliki masalah serupa dengan mosh dan ZSH & OMZ, tetapi akan sangat membantu jika orang lain dapat bergabung dan memberikan lebih banyak detail.

Jika saya mengubah ke _linux_ di perangkat lunak Xshell, ini berfungsi untuk kunci home/end tetapi warna shell menjadi aneh. Jadi, saya mengubah kembali ke default _xterm_.

linux

jika menggunakan bash di kunci peta dempul seperti yang Anda harapkan tetapi menggunakan ZSH & OMZ di dempul tidak.

  • Dikonfirmasi.

Ketika saya mengubah ke bash, tombol HOME/END berfungsi dengan baik, tetapi oh-my-zsh tidak.
Klien SSH saya adalah Xshell

Saya memiliki masalah yang sama dan diperbaiki dengan jawaban ini: http://superuser.com/a/104001/24760

@linlinlinlin Masalah ini secara default zsh tidak memiliki ikatan kunci untuk kunci Home dan End. Coba gunakan perintah berikut untuk mengatur binding:

bindkey "\033[1~" awal baris
bindkey "\033[4~" akhir baris

Apa alasannya tidak menetapkan bindkey ini sebagai default di zsh?

Juga, saya harus mengatur sendiri bindkey keypad:

# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[Ol" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + -  * /
bindkey -s "^[Ok" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"


Ini tentu terkait dengan tema oh-my-zsh, dan bukan oh-my-zsh secara langsung.

Pengamatan:
Home/End Keys berfungsi dengan baik di: Vanilla ZSH dan robbyrussel berfungsi dengan baik.
Menggunakan klien Bitvise SSH, dan gnome-terminal &

Masalah:
Misalnya, tema :POWERLEVEL9K tidak berfungsi dengan cara ini.

Hum, ini mulai melebar.

Saya pikir kita perlu menunjukkan prosedur konfigurasi yang bersih untuk mereproduksi masalah.

@ncanceill Bagi saya di Ubuntu 15.04 dengan gnome-terminal, jika saya memiliki .zshrc sepenuhnya kosong (yaitu bahkan tidak menunjuk ke omz) maka Home/End 'work', yang saya maksud adalah saya memiliki yang berikut:

$ bindkey $key[Home]
"^[OH" beginning-of-line
$ bindkey $key[End] 
"^[OF" end-of-line

dan menggunakan Home/End memindahkan kursor ke awal/akhir baris. Jika sebaliknya .zshrc hanya terdiri dari:

function zle-line-init {} # Note absence of `zle -N zle-line-init`

kemudian bindkey melaporkan hal yang sama, tetapi menggunakan Beranda/Akhir tidak memindahkan kursor. Dalam praktiknya, ini berarti bahwa menggunakan plugin yang mengaitkan atau memerlukan zle-line-init untuk terhubung (misalnya vi-mode, atau plugin eksternal zsh-autosuggestions) mencegah saya menggunakan Beranda/Akhir.

edit: Saya harus mengklarifikasi bahwa dengan set hook/fungsi zle-line-init , Home/End sebenarnya lebih buruk daripada tidak melakukan apa-apa, terutama. dalam mode Vi. Misalnya menekan Home dapat memotong buffer dan beralih ke mode Command!

Saya dapat mengonfirmasi bahwa tombol beranda/akhir rusak dengan .zshrc seperti yang dijelaskan @mickk-on-cpp. Itu diuji dengan memulai zsh dengan ZDOTDIR=/the/new/dir/ zsh dan hanya .zshrc di folder itu dengan ini:

function zle-line-init {}

Dalam instalasi zsh saya, itu juga memecahkan pencarian riwayat ketika mengetuk tombol atas dan sudah menulis beberapa perintah. Misalnya menjalankan adb devices , menjalankan beberapa perintah non- adb di antaranya dan kemudian menulis ad dan menekan tombol atas akan otomatis melengkapi ke adb devices . (Saya tidak tahu plugin apa yang melakukan ini.) Jika saya menonaktifkan tema yang saya gunakan ( bhilburn/powerlevel9k ) maka tiba-tiba itu akan berfungsi kembali. Saya menemukan bug ini setelah melakukan git bisect dan berakhir dengan bhilburn/ powerlevel9k@b31d0f sebagai komit yang

Saya menggunakan Konsole 5 di Debian Stretch.

Ini terkait dengan https://github.com/bhilburn/powerlevel9k/issues/131. Saya harap #2735 memperbaikinya, tetapi saya tidak punya waktu untuk memeriksanya.

Terima kasih @mickk-on-cpp, saya akan mencoba memeriksanya akhir minggu ini.

Ya, ini pasti terlihat seperti masalah "keypad transmit" alias mode "aplikasi" ( smkx / rmkx ) dari #2735: kode yang mengatur ikatan kunci, dan kode yang mengontrol terminal perilaku selama pengeditan baris ZLE memiliki harapan yang berbeda tentang urutan karakter apa yang akan dikirim oleh tombol keypad. (Dan @dritter, ya, saya percaya # 4191 atau # 4192 akan memperbaiki ini untuk Anda.)

Ini adalah bug dalam pengaturan sistem secara keseluruhan, tetapi sulit untuk menentukan dengan tepat di mana letak bug: masalahnya adalah membuat beberapa lapisan sistem yang rumit dan rewel semuanya sinkron. (Dan penyebab aslinya adalah serangkaian pilihan desain yang tidak menguntungkan dan bug historis yang kembali ke terminal asli tahun 70-an.) Dan untuk OMZ/zsh, kami ingin menyelaraskannya tidak hanya untuk satu komputer, tetapi dengan cara portabel dan dapat direproduksi yang bekerja di beberapa mesin dan sistem operasi.

Konfigurasi sistem perlu menentukan apakah mode transmisi keypad akan digunakan selama pengeditan ZLE, dan konfigurasikan semuanya agar konsisten dengan itu. OMZ telah menuju ke arah "ya" selama beberapa tahun terakhir, dan Zsh sendiri tampaknya telah menyelesaikannya, berdasarkan aktivitas milis pengembang mereka. Saya pikir itu jawaban yang tepat juga, karena itulah yang membuatnya bekerja dengan terminfo , yang memungkinkan Anda menentukan ikatan kunci secara portabel di berbagai terminal dan sistem operasi (dan lebih mudah dibaca). Yang membuat sulit adalah tidak semua orang setuju, atau bahkan memahami masalahnya dengan cara yang sama. Dan itu berlaku sampai ke pembuat paket distribusi: OpenSUSE bahkan tidak mengenali perbedaan mode transmisi vs lokal untuk beberapa definisi istilah yang mereka kirimkan.

Saya pikir @ncanceill benar: ini berjalan sangat luas, dan perlu diselesaikan dengan mempertimbangkan semua masalah terkait sekaligus, alih-alih melakukan perbaikan cepat untuk masing-masing. Lihat #4344, masalah pelacakan terkait terminal. Saya pikir secara harfiah setidaknya selusin masalah yang terdaftar ada varian yang satu ini, berkaitan dengan mode transmisi keypad dan pengaturan terminal yang terkait erat. Kita mungkin perlu memutuskan suatu perilaku, membuat semuanya konsisten di OMZ, dan kemudian mendokumentasikannya di halaman Wiki untuk referensi di masa mendatang.

Catatan Debug

Teman-teman, ketika Anda mencoba mereproduksi, ~/.zshrc kosong tidak cukup untuk mendapatkan sesi shell "bersih". Ada juga file /etc/z* tingkat sistem yang mengatur ikatan kunci dan perilaku terminal, dan ini sangat bervariasi antar sistem dengan cara yang akan mempengaruhi masalah ini. (Misalnya OS yang berbeda, dan versi OS yang berbeda, mungkin sangat berbeda, termasuk perubahan dalam pengaturan tombol transmisi/lokal default.) Untuk mendapatkan sesi shell yang benar-benar bersih, Anda perlu menjalankan zsh -f ( -f melewatkan file startup), mungkin menjalankannya di bawah env -i (untuk mendapatkan lingkungan yang benar-benar bersih), dan menjalankannya di bawah sesi terminal baru (untuk memastikan tidak ada status terminal yang tersisa dari proses sebelumnya yang dikeluarkan urutan kontrol). Untuk melakukan ini, siapkan "profil" baru di emulator terminal Anda yang menjalankan env -i zsh -l -f alih-alih shell login default. OMZ tidak akan berfungsi di bawah itu, tetapi itu akan menjadi yang paling dekat dengan "bersih, stok zsh di bawah terminal bersih".

Saya juga menggunakan env Ubuntu:14.04 murni.
Tetapi setelah saya menginstal oh-my-zsh dengan curl.
Saya tidak dapat menggunakan kunci home/end lagi saat saya menggunakan omz tetapi berfungsi dengan baik dengan bash.
Juga, tombol Beranda dan akhir saya ada di numpad yang berfungsi saat NumLock dinonaktifkan.
Selain itu, saya juga tidak mengubah pengaturan apa pun di folder .oh-my-zsh.

@tshrjn : Bisakah Anda menjalankan omz_diagnostic_dump dan memposting hasilnya sebagai Gist , sehingga kami dapat melihat detail konfigurasi sistem Anda?

Pengguna Ubuntu, terutama @mickk-on-cpp dan @JimmyAx : lihat /etc/zsh , dan khususnya, /etc/zsh/zshrc . Saya baru saja melihat kotak Ubuntu 14 saya sendiri, dan itu datang dengan file konfigurasi seluruh sistem yang luas.

Ubuntu /etc/zsh/zshrc mendefinisikan fungsi zle-line-init dan zle-line-finish , yang memancarkan smkx / rmkx . Ini berarti bahwa secara default (tidak ada .zshrc , tetapi tidak menjalankan zsh -f ), di bawah stok Ubuntu 14.04, Anda berada dalam mode aplikasi keypad saat mengedit baris perintah, dan terminfo -binding berbasis bekerja. Saat Anda membuat ~/.zshrc yang mendefinisikan fungsi zle-line-init kosong, Anda merusak fungsi yang sudah ada dan mendefinisikan ulang agar tidak mengeluarkan smkx , membiarkannya dalam mode "keypad lokal" ketika mengedit baris perintah. Dalam mode ini, tombol panah dan home dan end mengirim urutan karakter yang berbeda sehingga binding kunci berbasis terminfo "biasa" tidak akan berfungsi.

Hal ini sesuai dengan #2735.

Cara kodenya sekarang, ini adalah cara kerja urutan startup:

  • /etc/zsh/zshrc Ubuntu mendefinisikan zle-line-* untuk melakukan [sr]mkx
  • lib/key-bindings OMZ mengubah zle-line-* , untuk tetap melakukan [sr]mkx
  • Jika Anda memuat vi-mode , itu akan mendefinisikan ulang zle-line-* dengan yang rusak yang tidak melakukan [sr]mkx
  • Jika Anda memuat tema Powerlevel9K lama, itu akan mendefinisikan ulang zle-line-* dengan tema rusak yang tidak berfungsi [sr]mkx . (Meskipun ini baru saja diperbaiki baru-baru ini, di bhilburn/powerlevel9k#136.)

Jika [sr]mkx terjadi, maka ikatan kunci (atau hal lain) berdasarkan entri terminfo untuk tombol keypad mungkin tidak berfungsi. (Tergantung pada kunci mana dan terminal mana yang Anda gunakan.)


Rumah dan Akhir secara khusus tidak merusak saya dengan cara ini di gnome-terminal di Ubuntu atau iTerm2 di OS X. Tetapi emulator itu tampaknya mengirim urutan yang sama untuk Beranda/Akhir di kedua aplikasi keypad dan mode keypad-lokal . Emulator yang berbeda dapat bertindak secara berbeda.

Putty khususnya dapat memperumit ini karena perilakunya sehubungan dengan aplikasi keypad/mode lokal dan tombol Home/End _mereka sendiri_ dapat dikonfigurasi pengguna.

screen shot 2015-11-16 at 10 20 00 pm

@damijanc :

Saya dapat mengonfirmasi bahwa tombol HOME dan END tidak berfungsi pada MACOS Yosemite 10.10.3. Tombol Beranda menggulir layar konsol ke baris pertama keluaran dan Akhir menggulir ke baris terakhir pada keluaran.

Ini mungkin juga menjadi masalah dengan emulator terminal khusus yang Anda gunakan. Apakah Anda menggunakan Terminal.app atau iTerm2? Secara default, Terminal.app dikonfigurasi untuk menangkap penekanan tombol Home dan End itu sendiri dan menggunakannya untuk menggulir jendela, alih-alih meneruskannya sebagai urutan karakter ke shell yang berjalan di dalamnya.

screen shot 2015-11-16 at 10 27 22 pm

Jika Anda mengatur dengan cara ini, ikatan kunci tidak relevan karena penekanan tombol tersebut tidak akan pernah sampai ke shell. Jika Anda ingin menggunakan tombol Home, End, PgUp, atau PgDown untuk mengontrol program Anda di dalam Terminal.app, Anda harus mengkonfigurasi ulang profil Terminal.app Anda. Sayangnya, tidak ada cara mudah untuk melakukan ini. Itu tidak memberi Anda preset seperti "bertindak seperti xterm" atau apa pun; Anda harus memasukkan urutan pelarian secara manual, atau mencari sumber untuk file profil di internet.

EDIT: Dan Anda tahu, saya bahkan tidak tahu bagaimana ini akan berinteraksi dengan smkx/rmkx, karena itu hanya memberi Anda satu opsi untuk apa yang akan dipancarkan. Mungkin sebaiknya berikan saja urutan mode aplikasi.

Juga, menyetel $TERM ke linux mungkin merupakan pendekatan yang salah untuk semua orang. (Kecuali mungkin XShell, jika Anda juga menyetel jenis terminalnya ke linux .) Entri linux termcap/terminfo merujuk secara khusus ke konsol virtual Linux , terminal baris perintah yang muncul di mesin Linux monitor lokal saat Anda tidak menjalankan X Windows, atau Anda menekan Ctrl-Alt-_N_ untuk beralih ke satu. Itu tidak berarti emulator terminal generik yang berjalan di Linux. Pemetaan kunci dan urutan kontrol konsol virtual Linux berbeda dalam beberapa hal dari xterm dan banyak emulator terminal populer lainnya, jadi jika Anda menyetel TERM=linux , itu mungkin akan merusak sesuatu atau lainnya untuk Anda.

@apjanke Saya dapat mengonfirmasi bahwa jika saya melakukannya misalnya printf '%s' ${terminfo[smkx]} , maka Home/End berfungsi seperti yang diharapkan. Sampai waktu berikutnya saya beralih ke mode Perintah dan kembali ke mode Sisipkan, yang saya kira juga diharapkan.

Saya belum yakin bagaimana saya akan menindaklanjutinya, saya kira saya selalu dapat menjelajahi semua file konfigurasi itu dan menggabungkan semuanya ke dalam kait zle-line-* saya sendiri.

@mickk-on-cpp: Terima kasih telah memeriksa. Itu pertanda baik; itu berarti Anda mungkin mengalami masalah umum yang mungkin dapat kami selesaikan.

Anda dapat memeriksanya dan melihat apakah Anda dapat menemukan apa yang mendefinisikan kait zle-line-* yang tidak melakukan [sr]mkx benar dan memperbaikinya. Tidak banyak hal yang mendefinisikan kait ini. Jika hanya di OMZ ini rusak untuk Anda, mungkin plugin vi-mode yang melakukannya, dalam hal ini Anda dapat mendorong #4191 untuk digabungkan, atau gabungkan saja ke salinan vi-mode di direktori $ZSH_CUSTOM . Dan fakta bahwa itu berhenti bekerja ketika Anda beralih antara mode Command dan Insert membuatnya terdengar seperti Anda memiliki kait yang memancarkan rmkx tanpa syarat pada zle-keymap-select (jika tidak, saya pikir terminal Anda akan tetap dalam mode aplikasi sampai Anda selesai mengedit baris). Itu diharapkan jika plugin vi-mode yang melakukan ini pada Anda.

Anda juga bisa menambahkan binding tambahan ke ~/.zshrc menggunakan hardcoded sequences untuk mode transmisi Home/End sequence yang dikirim terminal Anda, sebagai solusi sementara. Mungkin juga merupakan tindakan pencegahan keamanan yang baik, karena mungkin memperbaiki masalah di mana kunci-kunci itu melakukan hal-hal yang merusak pada baris perintah Anda saat ini tidak berfungsi. (Karena jika tidak, urutan escape yang tidak dikenali akan diperlakukan sebagai Esc dan kemudian beberapa kunci lain, yang terlihat seperti urutan perintah editor vi .)

Jika Anda ingin membuat kait Anda sendiri, Anda dapat menyalin -start dan -finish dari lib/key-bindings.zsh , dan ambil zle-keymap-select dari sini dan saya pikir itu akan berhasil bagus. (Simpan mereka di ~/.zshrc setelah memuat OMZ.) Powerlevel9k adalah satu-satunya hal yang saya lihat di utas ini yang membutuhkan perilaku kustom tambahan.

Hai teman-teman, #4191 digabungkan, yang seharusnya memperbaiki ini. Ingin memperbarui OMZ Anda dan melihat apakah semuanya berfungsi untuk Anda sekarang?

@apjanke Tampaknya masih buggy di tty murni dan Konsole (TERM=xterm)

Di laptop Mageia saya di Zsh dalam TTY murni, tombol [End] dan [Home] berfungsi dalam mode emacs, tetapi tidak dalam mode vi. Di Konsole (emulator terminal KDE) mereka tidak berfungsi dengan baik di Zsh sama sekali.

Oke. Pada titik ini, apa yang tidak berfungsi? Apakah Home dan End berfungsi dalam mode emacs di Konsole untuk Anda? Itu seharusnya sudah diperbaiki oleh #4191, kecuali ada hal lain yang terjadi.

Kecuali Anda telah menambahkan ikatan tambahan untuk Beranda dan Akhir dalam mode vi , ikatan tersebut tidak akan berfungsi di sana secara default. Tidak ada binding untuk mereka di zsh secara default, dan Oh My Zsh hanya mendefinisikan binding untuk mereka dalam mode emacs . Lihat #3435 untuk diskusi terkait, jika itu saja.

Untuk pengelola: Mungkin akan menyenangkan untuk menambahkan binding untuk Home/End/PgUp/PgDn/Del di plugin vi-mode . Mereka tidak memiliki binding default yang akan kami hancurkan. Dan karena urutan karakter mereka dimulai dengan Esc untuk banyak terminal, jika urutan tersebut tidak terikat, mereka dapat ditafsirkan sebagai urutan kunci vi yang mungkin merusak yang beralih ke mode perintah vi dan kemudian melakukan sesuatu.

@jgrar Di

Satu hal lain tentang Putty: entri terminfo putty di OS X, dan mungkin OS lain, mengatakan bahwa terminal tidak mendukung peralihan mode aplikasi keypad (meskipun Putty benar-benar mendukung), dan menggunakan mode lokal keypad urutan karakter dalam entrinya untuk tombol kursor dan kemampuan keypad lainnya. Jadi mengalihkan $TERM ke putty secara efektif menonaktifkan mode aplikasi keypad dan mengatur pengikatan tombol agar berfungsi dalam mode lokal keypad.

$ infocmp xterm putty | grep '[sr]mkx\|cuu1\|cud1\|cub1'
    cud1: '^J', '\ED'.
    cuu1: '\E[A', '\EM'.
    kcub1: '\EOD', '\E[D'.
    kcud1: '\EOB', '\E[B'.
    kcuu1: '\EOA', '\E[A'.
    rmkx: '\E[?1l\E>', NULL.
    smkx: '\E[?1h\E=', NULL.

Saya telah menyingkirkan solusi sebelumnya dan semuanya berfungsi seperti yang diharapkan. Saya memiliki beberapa kebiasaan ketika saya menggunakan solusi dan mereka sekarang hilang, jadi ini adalah peningkatan yang luar biasa di pihak saya.

Ok saya secara resmi menutup masalah ini. Jika seseorang masih memiliki masalah, silakan komentar dan saya akan membukanya lagi.

Saya masih memiliki masalah yang sama tanpa pengaturan:

bindkey "\033[1~" beginning-of-line
bindkey "\033[4~" end-of-line

Apa yang saya lewatkan?

@linlinlinlin : Bisakah Anda menjalankan omz_diagnostic_dump dan memposting hasilnya sebagai Intisari sehingga kami dapat melihat detail konfigurasi Anda? Sayangnya, ini adalah masalah berurusan dengan banyak bagian yang bergerak dan membuat semuanya berbaris satu sama lain.

@apjanke omz_diagnostic_dump keluaran saya
https://Gist.github.com/linlinlinlin/c17ce49480ec1e0792f4

@linlinlinlin Apakah itu rumah/akhir yang rusak terjadi ketika Anda terhubung dari Putty? Ini mungkin masalah khusus Putty. Setelah beberapa pengujian, saya menemukan Putty memancarkan urutan yang berbeda untuk Home dan End daripada kebanyakan terminal lainnya. Secara default, ia mengirimkan urutan ^[[1~ dan ^[[4~ .

Ini mungkin tidak akan diperbaiki untuk dempul di OMZ sendiri dalam waktu dekat, jika sama sekali. Anda dapat mengonfigurasi Putty untuk mendeklarasikan $TERM sebagai putty alih-alih xterm (jika semua host target Anda memiliki entri terminfo putty ), atau Anda dapat tinggalkan saja solusi ini di ~/.zshrc . Ini akan membuat perilaku Home/End default Putty berfungsi, dan tidak akan merugikan apa pun.

bindkey "\033[1~" beginning-of-line
bindkey "\033[4~" end-of-line

@apjanke : Ya, saya menggunakan perangkat lunak Putty atau Xshell untuk terhubung ke host saya. Cara mengubah xterm atau metode bindkey keduanya berfungsi untuk saya. Saya akan menggunakan metode solusi. Terima kasih!

Saya juga tampaknya mengalami beberapa masalah dengan kunci home/end/delete tidak melakukan apa yang seharusnya.

Saya menjalankan arch linux dengan urxvt, zsh, dan oh-my-zsh, dengan plugin git dan vi-mode, pada tema agnoster.

Menekan salah satu tombol ini (hapus/beranda/akhiri), huruf besar/huruf kecil kata-kata alih-alih melakukan apa yang seharusnya.

Semuanya baik-baik saja dalam mode insert meskipun setelah saya secara eksplisit mengatur binding mereka menggunakan awal baris dan akhir baris, dll, tetapi dalam mode normal kuncinya masih akan rusak.

Binding kunci default OMZ diterapkan ke mode emacs , sehingga tidak tersedia dalam mode vi secara default. Plugin vi-mode menyediakan beberapa binding untuk peta kunci vi , tetapi saat ini tidak menyertakan Beranda atau Akhir.

Jika Anda berada dalam mode vi , urutan karakter yang tidak terikat dapat ditafsirkan sebagai urutan penekanan tombol perintah vi , karena dimulai dengan Esc ( ^[ ) karakter. Itu mungkin mengapa kapitalisasi/huruf kecil terjadi.

Mode penyisipan dan perintah vi menggunakan dua peta kunci yang berbeda. Binding kunci adalah per-keymap. Peta default dalam mode vi adalah viins (mode sisipkan), jadi panggilan bindkey tanpa peta kunci eksplisit diterapkan padanya, dan bukan ke vicmd . Jadi agar kunci Anda berfungsi sepenuhnya dalam mode vi , Anda harus mengikat kunci di vicmd dan viins keymaps, menggunakan bindkey opsi -M <keymap> . Sesuatu seperti ini.

if [[ "${terminfo[khome]}" != "" ]]; then
  bindkey -M viins "${terminfo[khome]}" beginning-of-line      # [Home] - Go to beginning of line
  bindkey -M vicmd "${terminfo[khome]}" beginning-of-line
fi
# ... and so on for each key ...

Saya menggunakan mode emacs dan memiliki bash sebagai shell saya.
Setiap kali saya memulai zsh di shell login saya, saya mengalami masalah ini.
Bahkan dengan num lock diaktifkan, saya tidak mendapatkan penekanan tombol apa pun dari num pad dan setelah saya keluar dari zsh (kembali ke bash shell login saya) saya juga tidak mendapatkan penekanan tombol dari num pad di sana.
Num pad kemudian berhenti bekerja pada tty itu setelah saya menggunakan zsh di shell login, tidak peduli berapa kali saya logout-login, itu tidak berfungsi lagi pada shell tty lgin kecuali di-boot ulang. Namun itu berfungsi dengan baik setelah sesi startinx X. Tetapi kemudian kembali ke shell login, itu tidak berfungsi lagi.

Karena masalah ini saya harus mengubah Shell saya menjadi bash

Saya memiliki masalah ini saat mengaktifkan plugin vi-mode, berikut adalah perbedaan dalam ikatan kunci:

grep "beginning-of-line" omz_diagdump_20171113-153* | grep -v ":#"
omz_diagdump_20171113-153207.txt:"^A" beginning-of-line
omz_diagdump_20171113-153207.txt:"^[OH" beginning-of-line
omz_diagdump_20171113-153321.txt:"^A" beginning-of-line

File pertama 153207 vi-mode, kedua 153321 dengan.

OS: Gentoo linux
Terminal: Terminal Gnome (3.20)

@cono Punya masalah ini saat mengaktifkan plugin vi-mode juga! Dan sepertinya "^[OH" tidak mengikat ke awal baris!

Ini omz_diagnostic_dump saya

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

mrgaolei picture mrgaolei  ·  3Komentar

Cabbagec picture Cabbagec  ·  3Komentar

cbou picture cbou  ·  3Komentar

nimmoadam picture nimmoadam  ·  3Komentar

faxotherapy picture faxotherapy  ·  3Komentar