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
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
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.
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!
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.
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.
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.
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
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
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 ..."
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
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
Clique com o botão direito do mouse em qualquer lugar na janela do Cygwin
Clique options
Clique na Keysguia
Carraça Backarrow sends ^H
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.
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.
stty
comando?Respostas:
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
fonte
Trabalhou para mim: No prompt de comando do Windows, digite
Isso o adicionará ao
.bashrc
e tudo poderá funcionar bem!fonte
TERM
variável de ambiente definida comomsys
através das configurações de variável de ambiente do Windows, conforme sugerido no StackOverflow, para ajudar comgit
problemas no Windows. Simplesmente redefini-lo paracygwin
in.bashrc
não ajudou, mas remover aTERM
entrada das configurações do Windows ajudou . Obrigado por me indicar a direção certa!Encontrei uma solução para um problema que se apresentava como o descrito acima.
Simplesmente execute a instalação do Cygwin novamente e reinstale
termcap
eterminfo
. 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" paraterm
aparecer na pesquisa.Minha pasta terminfo estava totalmente ausente. Não faço ideia do porquê. Espero que isso ajude alguém.
fonte
Edite seu c: \ cygwin \ cygwin.bat
Coloque isto:
SET TERM=cygwin
antes:
bash --login -i
fonte
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:
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:
Na maioria das vezes, fica assim:
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
fonte
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.
fonte
Alterar a
TERM
variávelcygwin
e adicionarSET TERM=cygwin
ao.bat
arquivo não funcionou para mim, mas eu a corrigi. Aqui o que eu fiz: No gerenciador de pacotes, devido à instalação, eu escolhi instalarxterm: X11 terminal emulator
, após a instalação eu adicioneiSET TERM=xterm
ao.bat
arquivo (como proposto acima), iniciei o terminal e em Opções -> Menu Terminal selecionadoType=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:
fonte
Eu concordo com todas as respostas aqui. Mas há uma maneira muito mais simples encontrada aqui: http://lifepluslinux.blogspot.in/2014/08/backspace-doesnt-work-in-vim-on-cygwin.html
fonte
Trabalhou para mim: No prompt de comando do Windows, digite
Isso o adicionará ao .bash_profile (não ao .bashrc, que não funcionou para mim e com uma quebra de linha principal)
fonte
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
confirme se o problema está relacionado ao terminal digitando o CygWin Terminal, isso deve ocorrer (ignore o aviso)
less my_session.log
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
Ou você também pode obter algo começando com o texto como "Reconstruído via infocmp ..."
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
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
fonte
Por favor, siga a imagem abaixo
options
Keys
guiaBackarrow sends ^H
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.fonte
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.
fonte