No bash, a tecla home/ end/ deleteestá inserindo um til ou, se precedida pela tecla de escape:[1~
Então eu digito echo hellp
, movo o cursor para hel|lp
e digite delete, e bam, eu tenho~tilde
Além disso, eu digito echo hellp
, movo o cursor para hel|lp
e digite esc, em seguida, excluo e bam, obtive[3~
$ echo hel~lp
hel~lp
$ echo hell[3~o
hell[3~o
~
Minha versão do bash:
$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
O que eu quero é um comportamento como cmd.exe
:
- Quero que o Esc limpe a linha / buffer atual
- Quero que o Home mova o cursor para o início da linha antes do primeiro caractere
- Quero que End mova o cursor até o final da linha antes do primeiro caractere
- Quero excluir para excluir o próximo caractere (à direita do cursor) da linha / buffer atual
O que preciso editar para corrigir isso? Esse padrão é no seu bash?
update: estou em uma máquina Windows executando um programa Windows, sh.exe (como você pode ver acima no GNU bash), compilado com mingw for msys:
$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys
command-line
bash
keyboard-shortcuts
key-binding
opcional
fonte
fonte
Respostas:
Você personaliza o bash através de um
.inputrc
arquivo no seu/home/username
, pode copiar o padrãoaqui é meu (os comentários começam com #)
para descobrir o que você precisa digitar na sua entradarc no lado esquerdo (o código de escape, pois pode variar entre laptop / desktop ...), no prompt digite
echo '
e digiteCtrl-V
seguido pela tecla, comoHome
, digite type'
exampleem seguida, substituir cada
^[
com\e
add\M-
paraAlt
, teoricamente, você usaria\C-
paraCtrl
mas de momento não funciona (limitação do Windows)os comandos disponíveis (como
backward-kill-line
) estão listados em http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029pode ver atalhos / ligações de teclado existentes com
bind -p
ounão mexa com TERMCAP
fonte
find / -name 'inputrc.default'
não encontra nada na minha máquina. Minha casa e meu fim costumavam trabalhar ... :( Além disso, para sua informação pessoal: Para recarregar o arquivo .inputrc, usebind -f ~/.inputrc
.$if mode=emacs
bloco. Eu adicionei essas duas linhas, e elas funcionam novamente !! : D"\e[1~": beginning-of-line ... "\e[4~": end-of-line
.Bem, como você diz que está trabalhando no Windows e não está usando um emulador de terminal adequado, como o PuTTY (com mintty , puttycyg et al ), recomendo que você consulte a documentação da linha de leitura e aprenda os atalhos para a linha de leitura. Vai ser melhor a longo prazo.
Se você usasse um emulador de terminal em vez da janela do console (sem falar do interpretador / shell aqui) que acompanha o Windows, você obteria uma alternativa mais configurável. Depois de tentar usar outros programas como o Vim, as coisas só pioram.
A essência: use um emulador de terminal adequado, mesmo no Windows ou aprenda os atalhos da linha de leitura. Testei os que mais uso agora e eles trabalham
msys.bat
.O arquivo a ser editado seria
/usr/share/terminfo
(que não existe no MinGW) - usetic
para "compilar" regras (que nem sequer são incluídas porque todo mundo sabe que o suporte seria severamente prejudicado). No entanto, eu não vi nenhum desenvolvimento útil para tornar isso ainda mais utilizável no Windows. É por isso que você deve usar um emulador de terminal adequado em primeiro lugar. Mas eu tenho certeza que um cirurgião poderá usar uma faca de cozinha para cirurgia, então por que você não deve usar as janelas do console internas do Windows. Boa sorte.fonte
Verifique a instalação do Readline
Quando isso acontece em uma instalação mínima do Debian / Ubuntu recente, é provavelmente porque você não instalou o
readline-common
pacote. Simplesmente instalar o pacote o resolverá.Por exemplo, no Docker com a digitação Debian Stretch
ls
HOME:Observe que, após a instalação do readline-common, ele só terá efeito nos novos shells de login.
fonte
exec bash
é uma maneira de substituir a instância atual do bash por uma nova, sem sair do terminal (conforme pode ser necessário ao reproduzir em um contêiner pTTY).Encontrei o seguinte útil também: https://wiki.archlinux.org/index.php/Home_and_End_keys_not_working
Especificamente:
Se suas chaves não estão funcionando, pode ser porque seu terminal em particular envia códigos de escape que não estão nesta lista. Primeiro, você precisa descobrir quais códigos de escape estão sendo enviados. Para vê-los, você pode usar um comando Readline chamado "quoted-insert" ou executar o comando showkey --scancodes, que gera o valor de uma chave literalmente. A ligação padrão para inserção entre aspas é Ctrl + V.
Por exemplo, você pode fornecer as seguintes séries de entradas no seu terminal:
E obtenha como saída
$ ^ [[1 ~ ^ [[4 ~
O ^ [indica um caractere de escape em seu shell, portanto, isso significa que sua tecla Home possui um código de escape de [1 ~ e sua tecla End tem um código de escape de [4 ~. Como esses códigos de escape não estão listados na configuração padrão do Readline, você precisará adicioná-los:
Observe que o Readline usa \ e para indicar um caractere de escape.
A peça relevante para mim foi colocar isso no inputrc:
fonte