Silme tuşu komut satırında çalışmıyor


10

** Not: Aynı soruyu SuperUser'da sordum, ancak yanıt alamadım. Şimdi bunun bu özel soru için daha uygun bir forum olduğunu anlıyorum. *

Bir ksh kabuğunda, Delete tuşu komut satırında düzgün çalışmıyor . Sil tuşuna bastığımda ~ alıyorum.

Nasıl yapabilirim:

  1. "İmleçteki karakter sil" işlevini Sil klavye düğmesine bağlama ? (Control-D, sil düğmesinin çalışmasını beklediğim gibi davranıyor ve takma ad kullanma girişimlerim başarısız ve muhtemelen naif.)
  2. " Satırın ilkine git" işlevini Ana klavye düğmesine mi bağlarsınız? (Kontrol A bunu şimdi yapıyor, ancak Home'un bunu yapmasını istiyorum.)
  3. " Satırın sonuna git " işlevini Son klavye düğmesine mi bağlarsınız? (Kontrol E bunu şimdi yapıyor, ama bitmesini istiyorum.)

Son (?) Güncelleme

Çalışan bir şeye rastladım, ama nedenini tam olarak anlamıyorum. Bu çalışıyor:

bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward

Göre http://www.qnx.com/developers/docs/6.3.2/neutrino/utilities/k/ksh.html#bind ,

prefix-2
Key binding: ^X, ^[[
Introduces a 2-character command sequence.

Benim Yani ben kullanımına gerek neden güncellenen soru prefix-2bunun için? Lütfen benim için tercüme et ki anlayabiliyorum, böylece herkesi bu konuda tekrar rahatsız etmem gerekmiyor.

ESKİ PERSONEL TAKİP EDİYOR

GÜNCELLEME

QNX'teki ESC'nin olduğu ortaya çıktı ^[. Komutu kullanarak, bind '^[[3~'='delete-char-backward'imlecin altındaki karakterin üzerine bir ile yazmak için imleci alabilirim ~. Bu en azından biraz ilerleme - şimdi kabuk için Delete Key nasıl yazıldığını biliyorum . Web'de gördüğüm çoğu şey, silme anahtarının olduğunu söylüyor ^?, ancak bu benim için işe yaramıyor gibi görünüyor. Ayrıca, PuTTy aracılığıyla bu erişiyorum bahsetmeliyim.

Anlamıyorum çünkü Kontrol D silme tuşunun yapmasını istediğim şeyi yapıyor. eot-or-deleteTekrar boşuna bağlamayı denedim .

Bu basit olmalı, değil mi?

GÜNCELLEME 2:

 bind | grep prefix
^X = prefix-2
^[ = prefix-1
ÿ = prefix-3
^[O = prefix-2
^[[ = prefix-2


bind | grep '[^ -~]'
ÿ = prefix-3
à  = beginning-of-line
à¡ = up-history
ठ= backward-char
ঠ= forward-char
ਠ= end-of-line
à© = down-history
ଠ= delete-char-forward
à´ = backward-word
ච= forward-word

GÜNCELLEME 3: Diğer ayarlarım

ENV ayarı

 echo $ENV
/etc/kshrc

BIND Komple Çıktı

bind
^A = beginning-of-line
^B = backward-char
^C = abort
^D = eot-or-delete
^E = end-of-line
^F = forward-char
^G = abort
^H = delete-char-backward
^I = complete
^J = newline
^K = kill-to-eol
^L = redraw
^M = newline
^N = down-history
^O = newline-and-next
^P = up-history
^R = search-history
^T = transpose-chars
^U = kill-line
^V = version
^W = kill-region
^X = prefix-2
^Y = yank
^[ = prefix-1
^\ = no-op
^] = search-character-forward
^^ = quote
^_ = eot
^? = delete-char-backward
ÿ = prefix-3
^[^H = delete-word-backward
^[^X = complete-file
^[^[ = complete
^[^] = search-character-backward
^[  = set-mark-command
^[# = comment
^[* = expand-file
^[. = prev-hist-word
^[0 = set-arg
^[1 = set-arg
^[2 = set-arg
^[3 = set-arg
^[4 = set-arg
^[5 = set-arg
^[6 = set-arg
^[7 = set-arg
^[8 = set-arg
^[9 = set-arg
^[< = beginning-of-history
^[= = complete-list
^[> = end-of-history
^[? = list
^[C = capitalize-word
^[L = downcase-word
^[O = prefix-2
^[U = upcase-word
^[[ = prefix-2
^[_ = prev-hist-word
^[b = backward-word
^[c = capitalize-word
^[d = delete-word-forward
^[f = forward-word
^[g = goto-history
^[h = delete-word-backward
^[l = downcase-word
^[u = upcase-word
^[y = yank-pop
^[^? = delete-word-backward
^X^X = exchange-point-and-mark
^X^Y = list-file
^X^[ = complete-command
^X? = list-command
^XA = up-history
^XB = down-history
^XC = forward-char
^XD = backward-char
^XH = beginning-of-line
^XP = delete-char-forward
^XY = end-of-line
^Xc = forward-word
^Xd = backward-word
^Xw = end-of-line
à  = beginning-of-line
à¡ = up-history
ठ= backward-char
ঠ= forward-char
ਠ= end-of-line
à© = down-history
ଠ= delete-char-forward
à´ = backward-word
ච= forward-word

/ Etc / kshrc

/etc # cat kshrc
case $- in
*i*)
    export SHELL_COLOR_BLUE="print -n \\033[0;34m"
    export SHELL_COLOR_GREEN="print -n \\033[0;32m"
    export SHELL_COLOR_RED="print -n \\033[0;31m"
    export SHELL_COLOR_LIGHTGRAY="print -n \\033[0;37m"
    export SHELL_COLOR_YELLOW="print -n \\033[1;33m"

    export COLOR_BLACK="\\033[0;30m"
    export COLOR_BLUE="\\033[0;34m"
    export COLOR_GREEN="\\033[0;32m"
    export COLOR_CYAN="\\033[0;36m"
    export COLOR_RED="\\033[0;31m"
    export COLOR_PURPLE="\\033[0;35m"
    export COLOR_BROWN="\\033[0;33m"
    export COLOR_LIGHTGRAY="\\033[0;37m"
    export COLOR_DARKGRAY="\\033[1;30m"
    export COLOR_LIGHTBLUE="\\033[1;34m"
    export COLOR_LIGHTGREEN="\\033[1;32m"
    export COLOR_LIGHTCYAN="\\033[1;36m"
    export COLOR_LIGHTRED="\\033[1;31m"
    export COLOR_LIGHTPURPLE="\\033[1;35m"
    export COLOR_YELLOW="\\033[1;33m"
    export COLOR_WHITE="\\033[1;37m"

    if [[ `id -u` -eq 0 ]]; then
        export PS1=`$SHELL_COLOR_RED`'$(hostname -s):'`$SHELL_COLOR_YELLOW`'$(pwd) # '`$SHELL_COLOR_LIGHTGRAY`
    else
        export PS1=`$SHELL_COLOR_BLUE`'$(hostname -s):'`$SHELL_COLOR_GREEN`'$(pwd) $ '`$SHELL_COLOR_LIGHTGRAY`
    fi

esac

PuTTy ayarları:

resim açıklamasını buraya girin

Önemli olabilecek veya olmayabilecek, ancak arka plan sağlayabilecek notlar:

Kabuk "PD KSHv5.2.14 99/07 / 13.2" dir. Evet, yükseltme seçeneğim yok ... bu gömülü bir sistem. "Modern bir kabuk alın" uygun bir cevap değildir. İşletim sistemi QNX Neutrino 6.4.1'dir.

bind aşağıdakileri gösterir:

 bind | grep del
^D = eot-or-delete
^H = delete-char-backward
^? = delete-char-backward
^[^H = delete-word-backward
^[d = delete-word-forward
^[h = delete-word-backward
^[^? = delete-word-backward
^XP = delete-char-forward
ଠ= delete-char-forward

infocmp aşağıdakileri gösterir:

infocmp  #      Reconstructed via infocmp from file:
/usr/lib/terminfo/x/xterm xterm|vs100|xterm terminal emulator,
        am, km, mir, msgr, xenl, xon,
        cols#80, it#8, lines#65, vt@,
        acsc=Oa``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, blink=@, bold=\E[1m, clear=\E[H\E[2J, cr=^M,
        csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
        cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
        cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
        dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
        el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I,
        hts=\EH, ich=\E[%p1%d@, ich1=\E[2~, il=\E[%p1%dL, il1=\E[L,
        ind=^J, is1=\E=\E[?1l, kBEG=\ENn, kCPY=\ENs, kCRT=\ENt,
        kDL=\ENv, kEXT=\ENw, kFND=\ENx, kHLP=\ENy, kOPT=\ENz,
        ka3=\EOs, kb2=\EOr, kbs=^H, kc1=\EOq, kcan=\EOm, kclo=\ENc,
        kclr=\ENa, kcmd=\EOu, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
        kcuu1=\E[A, kdch1=\E[P, kend=\E[9, kf1=\E[11~, kf10=\E[21~,
        kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~,
        kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
        kf9=\E[20~, kfnd=\ENf, khlp=\ENh, khome=\E[8, khts=\ENb,
        kich1=\E[2~, kmov=\ENi, kmrk=\ENm, kmsg=\ENe, knp=\E[6~,
        kopn=\ENo, kopt=\ENk, kpp=\E[5~, kref=\ENl, kres=\ENp,
        krfr=\ENg, krpl=\ENr, krst=\ENj, ksav=\ENq, kslt=\EOM,
        ktbc=\ENd, kund=\ENu, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
        rmam=\E[?7l, rmkx=\E>, rmso=\E[m,
        rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@,
        sc=\E7,
        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=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m,
        sgr0=\E[m, smacs=^N, smam=\E[?7h, smkx=\E=, smso=\E[7m,
        tbc=\E[3g,

stty aşağıdakileri gösterir:

stty Name:  /dev/ttyp0 Type:  pseudo Opens: 2
+edit +echok +echonl
+osflow  intr=^C  quit=^\ erase=^?  kill=^U   eof=^D start=^Q  stop=^S  susp=^Z lnext=^V   min=01  time=00   pr1=^[   pr2=5B  left=44 right=43
up=41  down=42   ins=40   del=50  home=48   end=59


Aslında bu bağlantıların her ikisini de gördüm ve kshrcboşuna değiştirmeye çalıştım . Ben olsun sh: /etc/kshrc[21]: trap: bad signal KEYBDne yazık ki başka bir kabuk seçeneği yok. Bunun PDKSH veya QNX veya her ikisi ile ilgili bir sorun olup olmadığını bilmiyorum. Hangi tuş kombinasyonlarının istediğime neden olacağını biliyorum. Onları uygun anahtarlarla eşleştirmek için sözdizimini bilmem gerekiyor.
kmort

Delete tuşu benim için Linux altında Pdksh (aynı sürüm, geçen yüzyıldan beri muhafaza edilmedi) ile çalışıyor. bind | grep prefixSize ne gösteriyor? Ya bind | grep '[^ -~]'?
Gilles 'SO- kötü olmayı kes'

@Gilles Bağlama komutlarınızın sonuçlarıyla güncelledim. Benim PuTTy ayarlarım olabilir mi? Yardımın için minnettarım. :-)
kmort

AFAIK bind '^[[3~'='delete-char-forward'çalışmalıydı. Bu ASCII olmayan karakterlerin nereden geldiğini anlamıyorum (8. bit seti ile ESC + foo dizileri veya latin1 / utf8 kafa karışıklıkları değildir). `Bind '^ X3 ~ = delete-char-forward' çalışıyor mu?
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


6

Google çalışanları için:

Whew. Çok basit olması gereken bir şey için bu zordu.

Kısa çözeltisi (de sil tuşuna ayarlamak için aşağıdaki kullanmaktır kshrcveya yere),

bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward

Ve PuTTy terminal ayarlarınızı rxvtbunun yerine olarak ayarlayın Standard.

PuTTy ayarları

Bu işi yapmama gerçekten yardımcı olan şey şuydu: http://www.mail-archive.com/misc@openbsd.org/msg81796.html

ksh ev ve bitiş tuşları ile aptalca şeyler yapar. Temel olarak Ev, Bitiş ve Sil arasındaki farkı aynı anda söyleyemedim. En son ne bağlandıysa, üç anahtarın hepsi yapardı. PuTTy'nin bu anahtarlar için gönderdiklerini değiştirmek son derece yardımcı oldu.

Not: Bazı kişiler, bir tuşa catbasıp yazıp enter tuşuna bastığınızda kabuğun hangi kodu aldığını görmek isteyip istemediğinizi önerir . Kabuğum için bu işe yaramadı. ~Bütün kontrol anahtarlarýný buldum . Bunun yerine bir Esckez basın , sonra tuşuna basın. Ardından kontrol kodu görünecektir. Kontrol kodunu kullanın bindve hazırsınız.


Bunun Conemu + Cygwin'de de çalıştığını doğrulayabilirim.
Janac Meena

2

[Biraz farklı bir kurulumumuz olmasına rağmen, umarım aynı genel ilkelerden bazılarının geçerli olduğunu düşündüğüm için aşağıdakiler birisi için yararlı olabilir. Bu benim için Linux'un temel terminal i / o'yu nasıl ele aldığı konusunda iyi bir öğrenme deneyimi olduğunu kanıtladı.

Kabuk bir cüce terminal penceresinde içine çalışıyorsa altında, ardından Preferences| ProfilesO zaman seçmek bir profil seçin Editve ardından Compatibilitysekme ve değişmiş Delete key generatesiçin Automatic. (Ya da bu başarısız olursa oradaki diğer seçenekleri deneyin.)

[Ben Debian Stretch'teyim.]


Nasıl, hatta Del'imin tam olarak kırıldığı zaman bile bilmiyorum, ama sağdan ziyade sola silinmeye başladı!

Bu makale işlerin nasıl yürüdüğünü anlamamda bana çok yardımcı oldu .


Yukarıdaki bağlantılı makalede önerilen hata ayıklama stratejilerini kullandım:

Yazın ^v Delve ^v Backspace[daha sonra delete tuşuna kontrol v ...], dönen terminali dizi kodlarını bulmak için.

Ve kullanımı showkey -s, showkey -k, showkey -ave daha sonra Delve Backspaceanahtarlar (TTY sürücüsünden çıkışı olarak, klavye ham ve terminal verilen karakter dizisine gibi) üç tabaka incelemek için.

Bundan stty (örneğin stty1) kullanırken, kabuk davranışımın xterm (bir Grafik X terminali içinden) kullanırkenkinden farklı olduğunu fark ettim. Del stty1'de doğru (ileri), ancak xterm'de geriye (sol) silindi.


Makale ölü bir bağlantı
Süt

1

Mevcut iki cevap benim için işe yaramadı Linux (Ubuntu 18.10) bash, SSH üzerinden Solaris 11.3 bash, gnome terminali kullanarak.

bindKomutu kullanmam gerektiğini buldum , ancak bir yerli Deleteile çalışmak için bir çözüm bulamadım .

İş-etrafında çok zaman olduğunu Deletebasıldığında, hiç taklit için silme tuşa basma eşleyerek bir silme ve Backspace.

bind '"^[[3~":"^[[C^?"'

Bunu yazmak için tuşlara basın:

CTRL-vDeletebirinci kısım
ve CTRL-vCTRL-vBackspaceikinci kısım için.
(veya kullanım \eyerine, örn kaçış için: "\e[3~")

Mükemmel değil, eğer Deleteçizgi sonundaysanız, hala geri gider. Ama bu ~karakteri günde on üç kez geri almak zorunda kalmadan kurtarıyor .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.