** Catatan: Saya mengajukan pertanyaan yang sama tentang SuperUser, tetapi tidak mendapat respons. Saya sekarang menyadari ini adalah forum yang lebih tepat untuk pertanyaan khusus ini. *
Dalam shell ksh, tombol Delete tidak berfungsi dengan baik pada baris perintah. Saya mendapatkan ~ ketika saya menekan Delete.
Bagaimana saya:
- ikat fungsi "Hapus karakter di kursor" ke tombol Hapus keyboard? (Control-D berperilaku seperti saya harapkan tombol hapus berfungsi dan upaya saya menggunakan alias tidak berhasil dan mungkin naif.)
- ikat fungsi " Pindah ke yang pertama dari baris" ke tombol keyboard Rumah? (Kontrol A melakukan ini sekarang, tetapi saya ingin Home melakukannya.)
- ikat fungsi " Pindahkan ke ujung garis " ke tombol Akhiri keyboard? (Kontrol E melakukan ini sekarang, tetapi saya ingin mengakhiri melakukannya.)
Pembaruan Terakhir (?)
Saya menemukan sesuatu yang berhasil, tetapi saya tidak mengerti mengapa. Ini bekerja:
bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward
Menurut 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.
Jadi pertanyaanprefix-2
saya yang terbaru adalah mengapa saya harus menggunakan ini? Tolong terjemahkan untuk saya sehingga saya dapat mengerti sehingga saya tidak perlu lagi mengganggu semua orang tentang ini.
STUFF STUFF FOLLOWS
MEMPERBARUI
Ternyata ESC di QNX adalah ^[
. Menggunakan perintah bind '^[[3~'='delete-char-backward'
saya bisa mendapatkan kursor untuk menimpa karakter di bawah kursor dengan a ~
. Ini adalah beberapa kemajuan setidaknya - Saya sekarang tahu cara mengeja Delete Key untuk shell. Sebagian besar hal yang saya lihat di web mengatakan bahwa tombol hapus adalah ^?
, tetapi sepertinya itu tidak berhasil bagi saya. Juga, saya harus menyebutkan saya mengakses ini melalui Putty.
Saya tidak mengerti karena Kontrol D melakukan apa yang saya ingin lakukan tombol hapus. Saya mencoba mengikatnya eot-or-delete
lagi dan tidak berhasil.
Ini harusnya sederhana, bukan?
PEMBARUAN 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
UPDATE 3: Lebih banyak pengaturan saya
Pengaturan ENV
echo $ENV
/etc/kshrc
BIND, Output Lengkap
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
Pengaturan Putty:
Catatan yang mungkin atau mungkin tidak penting, tetapi dapat memberikan latar belakang:
Shell adalah "PD KSH v5.2.14 99/07 / 13.2". Ya, saya tidak punya opsi untuk memutakhirkan ... ini adalah sistem yang disematkan. "Dapatkan shell modern" bukanlah jawaban yang layak. Sistem operasinya adalah QNX Neutrino 6.4.1.
bind menunjukkan yang berikut ini:
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 menunjukkan yang berikut:
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 menunjukkan yang berikut:
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
sumber
kshrc
tidak berhasil. Saya mendapatkansh: /etc/kshrc[21]: trap: bad signal KEYBD
saya tidak punya pilihan shell lain sayangnya. Saya tidak tahu apakah ini masalah dengan PDKSH atau dengan QNX atau keduanya. Saya tahu kombinasi tombol apa yang akan menyebabkan apa yang saya inginkan. Saya hanya perlu tahu sintaks untuk memetakannya ke tombol yang sesuai.bind | grep prefix
ditunjukkan untuk Anda? Danbind | grep '[^ -~]'
?bind '^[[3~'='delete-char-forward'
seharusnya bekerja. Saya tidak mengerti dari mana karakter non-ASCII itu berasal (mereka bukan ESC + foo urutan dengan set bit ke-8, atau kebingungan latin1 / utf8 daripadanya). Apakah `bind '^ X3 ~ = delete-char-forward' berfungsi?Jawaban:
Untuk Karyawan Google:
Wah. Untuk sesuatu yang seharusnya sangat sederhana, ini sulit.
The solusi singkat adalah menggunakan berikut untuk mengatur tombol hapus (di
kshrc
atau di mana pun),Dan atur pengaturan terminal Putty Anda
rxvt
sebagai gantiStandard
.Hal yang benar-benar membantu saya agar ini berfungsi adalah: http://www.mail-archive.com/[email protected]/msg81796.html
ksh melakukan hal-hal konyol dengan tombol home dan end. Pada dasarnya, saya tidak bisa membedakan antara Home, End, dan Delete secara bersamaan. Apa pun yang terakhir kali terikat, ketiga kunci akan dilakukan. Mengubah apa yang dikirim Putty untuk kunci-kunci ini sangat membantu.
Catatan: Beberapa orang menyarankan jika Anda ingin melihat kode apa yang diperoleh shell ketika Anda menekan tombol, ketik
cat
, tekan enter, lalu tekan tombol. Bagiku, ini tidak berhasil. Saya~
dapat semua kunci kontrol. Yang saya lakukan adalah menekanEsc
sekali, lalu tekan tombol. Kode kontrol akan muncul kemudian muncul. Gunakan kode kontrol itubind
dan Anda siap.sumber
[Meskipun kami memiliki pengaturan yang agak berbeda, saya harap yang berikut ini dapat berguna bagi seseorang, karena saya pikir beberapa prinsip umum yang sama berlaku. Ini terbukti menjadi pengalaman belajar yang baik bagi saya tentang bagaimana Linux menangani terminal dasar i / o.]
Jika shell berjalan di dalam jendela terminal gnome , maka di bawah
Preferences
|Profiles
pilih profil, lalu pilihEdit
dan kemudianCompatibility
tab, dan ubahDelete key generates
keAutomatic
. (Atau jika ini gagal coba pilihan lain di sana.)[Aku menggunakan Debian Stretch.]
Saya tidak tahu bagaimana, atau bahkan kapan tepatnya Del saya rusak, tetapi mulai menghapus ke kiri daripada ke kanan!
Artikel ini sangat membantu saya untuk memahami bagaimana segala sesuatunya bekerja.
Saya menggunakan strategi debugging yang disarankan dalam artikel tertaut di atas:
Ketik
^v Del
dan^v Backspace
, [control-v lalu hapus kunci ...] untuk menemukan kode urutan terminal yang dikembalikan.Dan penggunaan
showkey -s
,showkey -k
,showkey -a
dan kemudianDel
danBackspace
kunci untuk memeriksa tiga lapisan (mentah dari keyboard, sebagai output dari sopir tty, dan sebagai string karakter diberikan kepada terminal).Dari sini saya perhatikan bahwa ketika menggunakan stty (misalnya stty1) perilaku shell saya berbeda dari ketika menggunakan xterm (dari dalam terminal X Graphical). Del dihapus dengan benar ke depan (kanan) di stty1, tetapi mundur (kiri) di xterm saya.
sumber
Dua jawaban yang ada tidak berfungsi untuk saya pergi dari Linux (Ubuntu 18.10) bash, melalui SSH ke Solaris 11.3 bash, menggunakan terminal gnome.
Saya menemukan saya perlu menggunakan
bind
perintah, tetapi dengan bekerja-sekitar, karena saya tidak bisa mendapatkan Deletefungsi asli.Jadi yang perlu diperhatikan adalah ketika Deleteditekan, untuk mensimulasikan penghapusan dengan memetakan penekanan tombol delete ke →dan Backspace.
Untuk mengetik itu, gunakan tombol-tekan:
CTRL-vDeleteuntuk bagian pertama
dan CTRL-v→CTRL-vBackspaceuntuk yang kedua.
(atau menggunakan
\e
untuk melarikan diri sebaliknya, misalnya:"\e[3~"
)Itu tidak sempurna, jika Anda berada Deletedi garis akhir, itu masih mundur. Tapi itu menyelamatkan saya karena harus mundur
~
karakter beberapa kali sehari.sumber