Backspace não funciona no Cygwin

29

Acabei de instalar o Cygwin e a funcionalidade BACKSPACE não existe, ou seja, quando pressiono a tecla Backspace, recebo um espaço.

Eu tenho tentado pesquisar esse problema no Google, mas não encontrei nada conclusivo.

user620189
fonte
Você pode fornecer mais detalhes de como você instalou e invocou o Cygwin e onde exatamente a chave de backspace não funciona?
AK2
11
Eu estou supondo que isso está acontecendo no shell. O que acontece quando você digita control-V seguido de backspace? E qual é a saída do sttycomando?
Keith Thompson
Que tipo de teclado você tem? EUA, Reino Unido etc.
pjc50
Você já resolveu isso? Estou vendo isso agora na minha nova instalação do Cygwin, embora funcionasse anteriormente. Vale a pena notar que você não está recebendo "um espaço": está falhando em mover o cursor de volta para apagar o personagem. O espaço que você está vendo é o espaço que deveria pisar no personagem anterior. Se você pressionar ^ L, poderá ver que o backspace está funcionando. É por isso que stty não está consertando as coisas. É quase como o shell CMD ao qual Cygwin está ligado não está conseguindo interpretar o movimento do cursor.
SomeCallMeTim

Respostas:

33

No meu caso, o backspace não estava funcionando depois de criar ~ / .vimrc em branco. Após a alteração, funcionou

Colocar:

set bs = 2

em .vimrc

Encontrei isso em http://linux-journal.blogspot.com/2005/04/fix-vim-backspace-doesnt-work.html

vaichidrewar
fonte
Obrigado, isso funcionou para mim - anteriormente, no Vim, minha tecla backspace estava voltando ao longo da linha, mas não estava limpando as letras até que comecei a digitar. Agora ele executa o backspace 'usual'.
Robert
4
É ótimo que essa resposta tenha ajudado outros usuários, mas, neste caso, não é a solução para a pergunta, pois a pergunta original não está perguntando sobre o vim.
Kelsin
Isso também resolveu um problema semelhante que eu estava tendo com as teclas do cursor
Steve Paul
12

Trabalhou para mim: No prompt de comando do Windows, digite

echo export TERM=cygwin >> C:/cygwin/home/YourUser/.bashrc

Isso o adicionará ao .bashrce tudo poderá funcionar bem!

Marrciovr
fonte
11
Eu tinha a TERMvariável de ambiente definida como msysatravés das configurações de variável de ambiente do Windows, conforme sugerido no StackOverflow, para ajudar com gitproblemas no Windows. Simplesmente redefini-lo para cygwinin .bashrcnão ajudou, mas remover a TERMentrada das configurações do Windows ajudou . Obrigado por me indicar a direção certa!
Florian Brucker 26/07
Isso resolveu o fato de que o cygwin64 estava ignorando backspaces em comandos contendo quebras de linha. Obrigado.
suanik 12/02
11

Encontrei uma solução para um problema que se apresentava como o descrito acima.

Simplesmente execute a instalação do Cygwin novamente e reinstale termcape terminfo. Se você usar a caixa de pesquisa, poderá encontrá-los rapidamente. Em vez de dizer "Manter" para cada um, clique nele para dizer "Reinstalar". Pode ser necessário marcar a caixa de seleção "Ocultar obsoleto" para termaparecer na pesquisa.

Minha pasta terminfo estava totalmente ausente. Não faço ideia do porquê. Espero que isso ajude alguém.

SomeCallMeTim
fonte
11
Eu tinha um ncurses instalado personalizado, que eu removi. Após remover e reinstalar via cygwin setup.exe, tive esse problema. Eu não quero aplicar um bandaid definindo variáveis ​​TERM para algo diferente do que estava funcionando antes do meu acidente. Reinstalar o terminfo (não consegui encontrar o termcap) funcionou para mim. Obrigado!
Kelsin
legal, funciona, mas por que ?!
Yordan Georgiev
5

Edite seu c: \ cygwin \ cygwin.bat

Coloque isto: SET TERM=cygwin

antes: bash --login -i

Josef
fonte
11
A correção mais simples de longe. Espero que não haja efeitos colaterais.
RomanSt
1

Ao definir o tipo TERM, você está dizendo ao host qual TERMCAP usar para desenhar dentro da janela do terminal. A maioria dos hosts * NIX não sabe o que é um tipo de termo 'cygwin', portanto, não sabe como manipular caracteres na tela, como inserções, exclusões, rolagens, alterações de fonte etc.

Se você alterar a variável TERM no CYGWIN antes do telnet ou SSH para um host, obterá resultados muito melhores:

No CYGWIN:

d@test01 ~
$ TERM=ansi;export TERM
$ ssh suntest1

d@suntest1's password:
Sun Microsystems Inc.  SunOS 5.8     Generic patch    October 2001

d   pts/1         test01    Fri   Oct 12  00:15   still logged in
$ echo $TERM
ansi
$_

O host agora sabe que você tem um tipo de terminal ANSI e pode usar o arquivo ANSI TERMCAP para informar como se comunicar.

Se você não conseguir que isso funcione e quase tudo funcione corretamente, exceto o backspace, poderá reprogramar "getty" no host ao qual você se conecta para reconhecer o que deseja, e veja como (este é o mais antigo, o mais comum e o mais universal) maneira de resolver problemas de retrocesso / exclusão):

Você ssh ou telnet para o seu host e no host você executa o comando stty. Se você pressionar a tecla "BACKSPACE" e ela não retroceder, é porque o terminal provavelmente está procurando um caractere diferente com base no tipo TERM. Em vez de pesquisar tudo isso, você pode definir manualmente a definição de backspace na CLI ou em seu arquivo .profile, .bashrc ou .bash-profile no diretório $ HOME, conforme desejar, ou com base no sabor do * NIX que você é usando.

Portanto, se você pressionar ^ H (que é CONTROL-H) e a sua chave fizer backup, mas você pressionar a tecla BACKSPACE e ela não tentar usar stty da seguinte maneira:

stty erase \*<HIT YOUR BACKSPACE KEY HERE>*[ENTER]

Na maioria das vezes, fica assim:

stty erase \^?[ENTER]

O '\' informa que o próximo caractere será um caractere de controle não imprimível e para aceitá-lo, não "interpretá-lo".

Depois de pressionar [ENTER], você poderá pressionar a tecla [BACKSPACE] e fazer com que ela volte / exclua o que você digitou.

Você pode definir isso no seu shell.

Agora, se você ainda usa VI, às vezes a tradução não funciona e você precisa digitar ^ H no vi, mas tudo bem.

Você poderia ter dito:

stty apagar k [ENTER]

e literalmente teria traduzido 'k' no caractere apagar / excluir.

-D

TekOps
fonte
0

Ok, eu tive esse problema ao atualizar manualmente uma instalação do Cygwin. Enfim, encontrei este post , o que me levou à solução para minha instalação.

O cygwin mais antigo tinha um arquivo /etc/terminfo/c/cygwin, mas no cygwin mais novo esperava que o arquivo fosse /etc/terminfo/63/cygwin.

Depois de copiar o arquivo "cygwin" para esse local, a tecla backspace do bash shell funcionou bem, assim como tab e outras.

user327463
fonte
0

Alterar a TERMvariável cygwine adicionar SET TERM=cygwinao .batarquivo não funcionou para mim, mas eu a corrigi. Aqui o que eu fiz: No gerenciador de pacotes, devido à instalação, eu escolhi instalar xterm: X11 terminal emulator, após a instalação eu adicionei SET TERM=xtermao .batarquivo (como proposto acima), iniciei o terminal e em Opções -> Menu Terminal selecionado Type=xterm, depois reiniciei o terminal. Backspace começou a funcionar corretamente!

Nota: se você já instalou o cygwin - basta executar o instalador novamente e adicionar o pacote xterm.

Estou correndo:

  • SO = Windows 8 (x64)
  • Versão do Cygwin setup.exe = 2.850 (x64)
  • Versão Mitty = 1.2-beta1 (x86_64-pc-cygwin)
Argônio
fonte
0

Trabalhou para mim: No prompt de comando do Windows, digite

(echo; echo "export TERM=cygwin") >> ~/.bash_profile

Isso o adicionará ao .bash_profile (não ao .bashrc, que não funcionou para mim e com uma quebra de linha principal)

bjelli
fonte
0

Depois de passar 2 dias lendo coisas online. Eu encontrei este que funcionou para mim. Não sei se esse caso corresponde a todos. Mas funcionou como um encanto para mim, graças a Yuksel

O problema estava nos arquivos 'termInfo', etapas que ele sugeriu

  1. confirme se o problema está relacionado ao terminal digitando o CygWin Terminal, isso deve ocorrer (ignore o aviso)

    less my_session.log

AVISO: o terminal não está totalmente funcional

  1. Obtenha as informações do 'TermCap' a que caminho ou diretório ele está relacionado, digitando o código abaixo no Terminal CygWin

    infocmp -C

você deveria obter

infocmp: não foi possível abrir o arquivo terminfo / usr / share / terminfo / 63 / cygwin

Ou você também pode obter algo começando com o texto como "Reconstruído via infocmp ..."

  1. Execute o código abaixo no CygWin Terminal para executar o diagnóstico e obter detalhes adicionais sobre o caminho em que os arquivos são salvos

    cygcheck -s

que deve responder você semelhante ao texto abaixo

Cygwin Configuration Diagnostics

...

C: / cygwin / sistema binário, noacl

C: / cygwin / bin / usr / bin system binário, noacl

C: / cygwin / lib / usr / lib sistema binário, noacl

C: \ cygwin \ etc \ terminfo / usr / share / terminfo sistema binário, noacl

prefixo do cygdrive / usuário do cygdrive binário, noacl, posix = 0, automático

...

  1. confira uma linha semelhante a

C: \ cygwin \ etc \ terminfo / usr / share / terminfo sistema binário, noacl

da saída, você obteve o terceiro passo. agora copie todos os arquivos e pastas existentes dentro de / usr / share / terminfo para a pasta C: \ cygwin \ etc \ terminfo - NOTA: essa pasta pode ser diferente da sua, dependendo da instalação

yellowandred
fonte
0

Por favor, siga a imagem abaixo insira a descrição da imagem aqui

  1. Clique com o botão direito do mouse em qualquer lugar na janela do Cygwin
  2. Clique options
  3. Clique na Keysguia
  4. Carraça Backarrow sends ^H
  5. Pressione Aplicar.

Essa é a única coisa que funcionou para mim, especialmente porque, se você precisar fazer o SSH em um servidor (nem todas as correções funcionarão), eu adicionava stty erase ^?ao meu .bashrc, mas isso corrigia o problema 80% do tempo.

Marca
fonte
-1

Nunca experimentou seu problema. Tente instalar o Emulador de Terminal Mintty ( http://code.google.com/p/mintty/ ).

Está disponível no instalador do Cygwin. Melhor terminal para cygwin.

Luciano Fiandesio
fonte
Isso não ajudou.
user620189
Até estou preso no mesmo problema e do minty também a funcionalidade de backspace não está funcionando. Recebo espaço quando eu bati backspace em ambos os terminais mentolado, bem como cygwin terminais
Rachel
@ Rachel Você já resolveu isso? Estou vendo o mesmo problema com uma nova instalação do Cygwin. :(
SomeCallMeTim 19/03/12
@SomeCallMeTim: Consegui corrigir esse problema usando o Minty, o cygwin se comporta de maneira muito estranha às vezes.
23412 Rachel
@ Rachel Obrigado, embora eu tenha descoberto que meu problema era que a instalação do Cygwin perdeu alguns arquivos importantes (como / usr / lib / terminfo). Não sei por que eles estavam desaparecidos; encontrou outra pessoa com esse problema, entrou na instalação e disse ao terminfo e termcap para reinstalar, e tudo funcionou.
SomeCallMeTim 27/03/12