Dalam bash, tombol home/ end/ deletememasukkan tilde, atau jika didahului dengan tombol escape:[1~
Jadi saya ketik echo hellp
, pindahkan kursor ke hel|lp
dan ketik delete, dan bam, saya dapat~tilde
Juga, saya mengetik echo hellp
, memindahkan kursor ke hel|lp
dan ketik esc lalu hapus, dan bam, saya dapat[3~
$ echo hel~lp
hel~lp
$ echo hell[3~o
hell[3~o
~
Versi bash saya:
$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
Yang saya inginkan adalah perilaku seperti cmd.exe
:
- Saya ingin Esc menghapus garis / buffer saat ini
- Saya ingin Home memindahkan kursor untuk memulai baris sebelum karakter pertama
- Saya ingin End memindahkan kursor ke akhir baris sebelum karakter pertama
- Saya ingin menghapus untuk menghapus karakter berikutnya (kanan kursor) dari baris saat ini / buffer
Apa yang harus saya edit untuk memperbaikinya? Apakah ini default pada bash Anda?
pembaruan: Saya menggunakan mesin windows yang menjalankan program windows, sh.exe (seperti yang Anda lihat di atas GNU bash), dikompilasi dengan mingw untuk msys:
$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys
Jawaban:
Anda menyesuaikan bash melalui
.inputrc
file di Anda/home/username
, Anda dapat menyalin defaultini milik saya (komentar dimulai dengan #)
untuk mengetahui apa yang perlu Anda ketik di inputrc Anda di sisi kiri (kode escape, karena dapat bervariasi antara laptop / desktop ...), pada prompt ketik
echo '
lalu ketikCtrl-V
diikuti dengan kunci, sepertiHome
, lalu ketik'
contohkemudian mengganti setiap
^[
dengan\e
add\M-
untukAlt
secara teoritis Anda akan menggunakan\C-
untukCtrl
tetapi saat ini tidak bekerja (Buka di jendela batasan)perintah yang tersedia (seperti
backward-kill-line
) tercantum di http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029Anda dapat melihat pintasan / binding keyboard yang ada dengan
bind -p
ataujangan macam-macam dengan TERMCAP
sumber
find / -name 'inputrc.default'
tidak menemukan apa pun di komputer saya. Rumah dan akhir saya digunakan untuk bekerja ... :( Juga, FYI kepada orang lain: Untuk memuat ulang file .inputrc, gunakanbind -f ~/.inputrc
.$if mode=emacs
blok. Saya menambahkan dua baris ini, dan mereka bekerja lagi !! : D"\e[1~": beginning-of-line ... "\e[4~": end-of-line
.Nah, karena Anda mengatakan Anda bekerja pada Windows dan tidak menggunakan emulator terminal yang tepat seperti Putty (dengan mintty , puttycyg et al ), saya akan merekomendasikan Anda membaca dokumentasi readline dan mempelajari cara pintas untuk readline. Akan lebih baik dalam jangka panjang.
Jika Anda menggunakan emulator terminal alih-alih jendela konsol (tidak membicarakan interpreter / shell di sini) yang disertakan dengan Windows, Anda akan mendapatkan alternatif yang lebih dapat dikonfigurasi. Setelah Anda mencoba menggunakan program lain seperti Vim, segalanya hanya akan bertambah buruk.
Intinya: gunakan emulator terminal yang tepat, bahkan pada Windows atau pelajari pintasan readline. Saya menguji yang paling saya gunakan sekarang dan mereka bekerja dengan
msys.bat
.File yang akan diedit adalah
/usr/share/terminfo
(yang tidak ada di MinGW) - gunakantic
untuk "mengkompilasi" aturan (yang bahkan tidak termasuk karena semua orang tahu bahwa dukungan akan sangat lumpuh). Namun, saya belum melihat perkembangan yang berguna untuk membuat ini bahkan dapat digunakan pada Windows. Inilah sebabnya mengapa Anda harus menggunakan emulator terminal yang tepat di tempat pertama. Tapi saya yakin seorang ahli bedah akan dapat menggunakan pisau dapur untuk operasi, jadi mengapa Anda tidak menggunakan Windows built-in console windows. Semoga berhasil.sumber
Periksa pemasangan Readline
Ketika ini terjadi pada instalasi minimal Debian / Ubuntu baru-baru ini, itu mungkin karena Anda belum menginstal
readline-common
paket. Cukup menginstal paket akan menyelesaikannya.Misalnya di Docker dengan pengetikan Debian Stretch
ls
HOME:Harap dicatat bahwa setelah menginstal readline-common hanya akan berpengaruh pada shell login baru.
sumber
exec bash
adalah cara untuk mengganti instance bash saat ini dengan yang baru, tanpa keluar dari terminal (seperti yang mungkin diperlukan saat bermain dalam wadah pTTY).Saya menemukan yang berikut ini juga membantu: https://wiki.archlinux.org/index.php/Home_and_End_keys_not_working
Secara khusus:
Jika kunci Anda tidak berfungsi, bisa jadi karena terminal khusus Anda mengirim kode melarikan diri yang tidak ada dalam daftar ini. Pertama, Anda perlu mencari tahu kode melarikan diri apa yang sedang dikirim. Untuk melihatnya, Anda dapat menggunakan perintah Readline yang disebut "quot-insert" atau menjalankan perintah showkey --scancodes yang menampilkan nilai kata kunci. Ikatan default untuk kutipan-sisipkan adalah Ctrl + V.
Misalnya, Anda bisa memberikan serangkaian input berikut di terminal Anda:
Dan dapatkan sebagai output
$ ^ [[1 ~ ^ [[4 ~
The ^ [menunjukkan karakter escape di shell Anda, jadi ini berarti bahwa key Home Anda memiliki kode escape [1 ~ dan Anda End key memiliki kode escape dari [4 ~. Karena kode pelarian ini tidak tercantum dalam konfigurasi Readline default, Anda harus menambahkannya:
Perhatikan bahwa Readline menggunakan \ e untuk mengindikasikan karakter pelarian.
Bagian yang relevan bagi saya adalah menempatkan ini di inputrc:
sumber