В bash ключ home/ end/ deleteвставляет тильду или, если ему предшествует escape-ключ:[1~
Поэтому я печатаю echo hellp
, перемещаю курсор hel|lp
и печатаю delete, и bam, я получил~tilde
Кроме того, я печатаю echo hellp
, перемещаю курсор hel|lp
и набираю esc, затем удаляю, и bam, я получил[3~
$ echo hel~lp
hel~lp
$ echo hell[3~o
hell[3~o
~
Моя версия Bash:
$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
То, что я хочу, это поведение, как cmd.exe
:
- Я хочу, чтобы Esc очищала текущую строку / буфер
- Я хочу, чтобы Home переместил курсор в начало строки перед первым символом
- Я хочу, чтобы End переместил курсор в конец строки перед первым символом
- Я хочу удалить, чтобы удалить следующий символ (справа от курсора) из текущей строки / буфера
Что мне нужно отредактировать, чтобы это исправить? Это по умолчанию на вашем Bash?
обновление: я на машине с Windows, на которой запущена программа для Windows, sh.exe (как вы можете видеть выше, GNU bash), скомпилированная с mingw для msys:
$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys
command-line
bash
keyboard-shortcuts
key-binding
необязательный
источник
источник
Ответы:
Вы настраиваете bash через
.inputrc
файл в своем/home/username
, вы можете скопировать по умолчаниювот мой (комментарии начинаются с #)
чтобы узнать, что вам нужно ввести в свой inputrc с левой стороны (управляющий код, так как он может варьироваться в зависимости от ноутбука / рабочего стола ...), введите в командной строке,
echo '
затем введите,Ctrl-V
затем нажмите клавишу, напримерHome
, введите'
примерзатем сменяет друг
^[
с\e
оным\M-
дляAlt
теоретически вы бы использовать\C-
для ,Ctrl
но в настоящее время он не работает (Windows ограничение)доступные команды (например
backward-kill-line
) перечислены в http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029Вы можете просмотреть существующие сочетания клавиш / привязки с
bind -p
илине связывайтесь с TERMCAP
источник
find / -name 'inputrc.default'
ничего не находит на моей машине. Мой дом и конец работали ... :( Кроме того, к вашему сведению: для перезагрузки файла .inputrc используйтеbind -f ~/.inputrc
.$if mode=emacs
блока. Я добавил эти две строки, и они снова работают !! : D"\e[1~": beginning-of-line ... "\e[4~": end-of-line
.Ну, так как вы говорите, что работаете в Windows и не используете подходящий эмулятор терминала, такой как PuTTY (с mintty , puttycyg и др. ), Я бы порекомендовал вам обратиться к документации по readline и изучить ярлыки для readline. Это будет лучше в долгосрочной перспективе.
Если бы вы использовали эмулятор терминала вместо окна консоли (не говоря уже о интерпретаторе / оболочке), который поставляется с Windows, вы бы получили более настраиваемую альтернативу. Когда вы попытаетесь использовать другие программы, такие как Vim, все будет только хуже.
Суть: используйте подходящий эмулятор терминала, даже в Windows, или изучите ярлыки readline. Я проверил те, которые я использую больше всего сейчас, и они работают с
msys.bat
.Файл для редактирования будет иметь
/usr/share/terminfo
(который не существует в MinGW) - использованиеtic
для «компиляции» правил (которые даже не включено , потому что все знают , что поддержка будет сильно подорваны). Тем не менее, я не видел никакой полезной разработки, чтобы сделать это даже почти пригодным для использования в Windows. Вот почему вы должны использовать правильный эмулятор терминала в первую очередь. Но я уверен, что хирург сможет использовать кухонный нож для операции, так почему бы вам не использовать встроенные окна консоли Windows. Удачи.источник
Проверьте установку Readline
Когда это происходит при минимальной установке последней версии Debian / Ubuntu, возможно, это потому, что вы не установили
readline-common
пакет. Простая установка пакета решит это.Например, в Docker с использованием Debian Stretch
ls
HOME:Обратите внимание, что после установки readline-common это повлияет только на новые оболочки входа в систему.
источник
exec bash
это способ замены текущего экземпляра bash новым без выхода из терминала (что может потребоваться при воспроизведении в контейнере pTTY).Я также нашел следующее полезное: https://wiki.archlinux.org/index.php/Home_and_End_keys_not_working
В частности:
Если ваши ключи не работают, это может быть потому, что ваш конкретный терминал отправляет escape-коды, которых нет в этом списке. Сначала нужно выяснить, какие коды эвакуации отправляются. Чтобы увидеть их, вы можете использовать команду Readline с именем «quoted-insert» или выполнить команду showkey --scancodes, которая дословно выводит значение ключа. Связывание по умолчанию для цитирования-вставки - Ctrl + V.
Например, вы могли бы дать следующую последовательность входов в вашем терминале:
И получить в качестве вывода
$ ^ [[1 ~ ^ [[4 ~
Символ ^ [обозначает escape-символ в вашей оболочке, так что это означает, что ваш ключ Home имеет escape-код [1 ~, а ваш ключ End имеет escape-код [4 ~. Поскольку эти escape-коды не указаны в конфигурации Readline по умолчанию, вам необходимо добавить их:
Обратите внимание, что Readline использует \ e для обозначения escape-символа.
Для меня соответствующая часть была помещать это в inputrc:
источник