zsh (z shell) numpad / numlock tidak berfungsi

46

Saya baru saja meningkatkan ke zsh / oh-my-zsh. Hampir segera saya perhatikan di komputer saya bahwa numpad 10 digit tidak berfungsi. Itu bekerja di bash dan kulit ikan.

Anehnya, jika saya menahan tombol fn / function berfungsi seperti numlock dan berfungsi, tetapi tidak "mengunci" dan saya harus terus menekan fn untuk mengetikkan angka-angka.

Ada ide di luar sana?

BradGreens
sumber

Jawaban:

89

Tombol numpad tidak mengirim simbol kunci yang sama dengan tombol angka 'normal' di baris atas. Sebagai contoh: Tombol numpad-1 mengirimkan KP_1sementara tombol 1 hanya mengirim 1.

Beberapa terminal secara otomatis memetakan kembali kunci numpad untuk mengirim kode yang sama ke shell. Juga, beberapa cangkang (misalnya bash) hanya menginterpretasikan kunci numpad seperti padanannya di blok utama.

zshtidak melakukan pemetaan secara otomatis, tetapi Anda dapat menggunakannya bindkeyuntuk melakukan pemetaan sendiri. Saya memiliki yang berikut ini di ~/.zshrcuntuk mendapatkan tombol berfungsi:

# 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" "/"

bindkey -s in-string out-stringmengikat in-stringuntuk out-string. Jika in-stringdiketik out-stringdidorong kembali dan diperlakukan sebagai input.

Kode aktual (misalnya ^[Oq) mungkin berbeda pada sistem Anda. Anda dapat menekan Ctrl+ vdiikuti oleh kunci yang dimaksud untuk mendapatkan kode terminal Anda.

Adaephon
sumber
3
Terima kasih tuan, ini bekerja dengan baik untuk saya dan tip Ctrl+ vhebat!
BradGreens
1
Terima kasih, ini sangat berguna tetapi beberapa tombol hilang untuk keyboard USB Apple. Ini adalah kunci yang mengikat untuk Keyboard Apple: # Keypad # 0. Masukkan bindkey -s "^ [Op" "0" bindkey -s "^ [On" "." bindkey -s "^ [OM" "^ M" # 1 2 3 bindkey -s "^ [Oq" "1" bindkey -s "^ [Atau" "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" ^ [Lembu "" 8 "bindkey -s" ^ [Oy "" 9 "# + - * / bindkey -s" ^ [Oke "" + "bindkey -s" ^ [Om "" - " bindkey -s "^ [Oj" "*" bindkey -s "^ [Oo" "
dan ini juga bagus: stackoverflow.com/questions/18042685/…
krowe
github.com/krowe/kshrc-k800-keybindings Jadikan ini berdasarkan jawaban ini.
krowe
16

Untuk melengkapi jawaban yang diberikan @adaephon, berikut ini adalah binding yang benar untuk keyboard USB Apple (A1243). Ini perlu ditambahkan ~/.zshrc.

# Fix numeric keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
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 "^[Ol" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"
bindkey -s "^[OX" "="
Robin Daugherty
sumber
1
Robin, dapatkah Anda memperluas jawaban Anda untuk memasukkan di mana OP harus memasukkan informasi ini untuk memperbaiki masalah mereka?
music2myear
2
Ini bekerja untuk saya, kecuali +(harus menggunakan bindkey -s "^[Ok" "+") dan =(hilang bindkey -s "^[OX" "=")
dain
4

Juga melengkapi jawaban dari @adaephon. Inilah yang harus saya gunakan untuk Dell Desktop saya, mungkin bisa membantu. Cukup tambahkan di file .zshrc Anda.

(BTW jangan menambahkan ikatan dari semua jawaban, Anda hanya perlu memiliki satu ikatan per kunci)

# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
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 "^[OQ" "/"
bindkey -s "^[OR" "*"
bindkey -s "^[OS" "-"
bindkey -s "^[Ol" "+"
#END Keypad
Daniel Bermudez
sumber
Selamat Datang di Pengguna Super! Bisakah Anda mengedit jawaban Anda untuk memasukkan sedikit panduan tentang apa ini dan bagaimana / di mana menggunakannya?
Excellll
Solusi ini bekerja untuk saya untuk zsh dengan tombol windows (PUTTY, with Terminal > Keyboard > Initial state of numeric pad > Normal)
Ivan Castellanos
3

Di Mac OSX El Capitan saya, kunci periode ^[0nbukan ^[01. Saya juga memiliki keyboard nirkabel Logitech untuk Mac dan memiliki =tanda pada numpad juga. Pemetaan terakhir saya terlihat seperti di bawah ini:

# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
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" "/"
bindkey -s "^[OX" "="

Namun solusi yang diusulkan orang lain berfungsi dengan benar.

Mr. Doomsbuster
sumber
1

Jika Anda menggunakan Kitty untuk mengakses server linux di SSH dan keypad berfungsi baik dengan Bash tetapi tidak dengan ZSH, Anda dapat mencoba menambahkan berikut ini di ~/.zshrcfile konfigurasi Anda :

# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
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 "^[Ol" "+"
bindkey -s "^[OS" "-"
bindkey -s "^[OR" "*"
bindkey -s "^[OQ" "/"

Menyimpan. Logout dan login lagi untuk memuat ulang konfigurasi ZSH, atau Anda dapat mengetik yang berikut di terminal Anda:

. ~/.zshrc

Papan tombol sekarang berfungsi seperti yang diharapkan!

Gabriel Hautclocq
sumber
Ini menggandakan jawaban lain dan tidak menambahkan konten baru. Harap jangan mengirim jawaban kecuali Anda benar-benar memiliki sesuatu yang baru untuk disumbangkan.
DavidPostill
Biarkan saya tidak setuju. Hanya jawaban ini yang memiliki kode serupa: superuser.com/a/907695/351420 Dan saya menjelaskan konteks dan cara menggunakan kode-kode itu, saya lebih baik daripada jawaban ini.
Gabriel Hautclocq