Backspace не работает в Cygwin

26041
user620189

Я только что установил Cygwin, и функции BACKSPACE там нет, то есть, когда я нажимаю клавишу Backspace, я получаю пробел.

Я пытался исследовать эту проблему в Google, но не нашел ничего убедительного.

28
Можете ли вы дать более подробную информацию о том, как вы установили и вызвали Cygwin, и где именно клавиша возврата не работает? ak2 13 лет назад 0
Я предполагаю, что это происходит в оболочке. Что происходит, когда вы нажимаете control-V, а затем клавишу Backspace? И каков вывод команды `stty`? Keith Thompson 13 лет назад 1
Какая у вас клавиатура? США, Великобритания и т. Д. pjc50 12 лет назад 0
Вы когда-нибудь решали это? Я вижу это сейчас на моей новой установке Cygwin, хотя раньше это работало. Стоит отметить, что вы не получаете «пробел»: невозможно переместить курсор назад, чтобы стереть символ. Пространство, которое вы видите - это пространство, которое должно было растоптать предыдущего персонажа. Если вы нажмете ^ L, вы увидите, что backspace работает. Вот почему stty не чинит вещи. Это похоже на то, что оболочка CMD, с которой связан Cygwin, не может интерпретировать движение курсора. SomeCallMeTim 12 лет назад 0

11 ответов на вопрос

34
vaichidrewar

В моем случае backspace вообще не работал после создания пустого ~ / .vimrc. Следующее изменение заставило его работать

Положил:

установить bs = 2

в .vimrc

Нашел это по адресу http://linux-journal.blogspot.com/2005/04/fix-vim-backspace-doesnt-work.html

Спасибо, это сработало для меня - раньше, в Vim, моя клавиша возврата возвращалась вдоль линии, но не очищала буквы, пока я не начал печатать. Теперь он делает «обычный» забой. Robert 11 лет назад 0
Здорово, что этот ответ помог другим пользователям, но в данном случае это не решение вопроса, так как оригинальный вопрос не касается vim. Kelsin 10 лет назад 3
Это также решило похожую проблему с клавишами курсора Steve Paul 8 лет назад 0
11
SomeCallMeTim

Я нашел решение проблемы, которая была представлена ​​выше.

Просто запустите установку Cygwin снова и переустановите termcapи terminfo. Если вы используете окно поиска, вы можете найти их быстро. Вместо того, чтобы сказать «Сохранить» для каждого, нажмите на него, чтобы сказать «Переустановить». Возможно, вам придется установить флажок «Скрыть устаревшие», termчтобы появиться в поиске.

Моя папка terminfo полностью отсутствовала. Понятия не имею почему. Надеюсь, это кому-нибудь поможет.

У меня были кастомные ncurses, которые я удалил. После удаления и переустановки через cygwin setup.exe у меня возникла эта проблема. Я не хочу применять bandaid, устанавливая переменные TERM для чего-то отличного от того, что работало до моей неудачи. Переустановка terminfo (я не смог найти termcap) сработала для меня. Спасибо! Kelsin 10 лет назад 1
круто, работает, но почему ?! Yordan Georgiev 9 лет назад 0
9
Marrciovr

Worked for me: In the Windows command prompt, type

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

This will add it to the .bashrc and everything may work nicely!

У меня была переменная окружения `TERM`, установленная на` msys` через настройки переменных окружения Windows, как предложено [на StackOverflow] (http://stackoverflow.com/a/10980838/857390), чтобы помочь с проблемами `git` в Windows. Простой сброс его на `cygwin` в` .bashrc` не помог, но удаление записи `TERM` из настроек Windows помогло. Спасибо, что указал мне правильное направление! Florian Brucker 11 лет назад 1
5
Josef

Edit your c:\cygwin\cygwin.bat

Place this: SET TERM=cygwin

before: bash --login -i

Самое простое решение на сегодняшний день. Надеюсь, что нет никаких побочных эффектов. RomanSt 10 лет назад 1
1
TekOps

Когда вы устанавливаете тип TERM, вы указываете хосту, какой TERMCAP использовать для рисования в окне терминала. Большинство хостов * NIX не знают, что такое термин «cygwin», поэтому они не знают, как выполнять манипуляции с символами на экране, такие как вставка, удаление, прокрутка, изменение шрифта и т. Д.

Если вы измените переменную TERM в CYGWIN до telnet или SSH на хост, вы получите намного лучшие результаты:

В 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 $_ 

Хост теперь знает, что у вас есть тип терминала ANSI, и он может использовать свой файл ANSI TERMCAP, чтобы сообщить ему, как общаться.

Если вы не можете заставить это работать, и почти все работает правильно, кроме возврата, вы можете перепрограммировать «getty» на хосте, к которому вы подключаетесь, чтобы узнать, что вы хотите, и вот как (это самый старый, самый распространенный и самый универсальный способ решения проблем возврата / удаления):

Вы ssh или telnet к вашему хосту и на хосте вы запускаете команду stty. Если вы нажмете клавишу «BACKSPACE», и она не вернется назад, это потому, что терминал, вероятно, ищет другой символ, основанный на типе TERM. Вместо того, чтобы копаться во всем этом, вы можете вручную установить определение backspace в CLI или в своем файле .profile, .bashrc или .bash-profile в вашем каталоге $ HOME по своему желанию или на основе разновидности * NIX, которой вы являетесь с помощью.

Поэтому, если вы нажмете ^ H (это CONTROL-H), и ваша клавиша выполнит резервное копирование, но вы нажмете клавишу BACKSPACE, и она не попытается использовать stty следующим образом:

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

В большинстве случаев это будет выглядеть так:

stty erase \^?[ENTER] 

«\» Говорит ему, что следующий символ будет непечатным управляющим символом и будет принимать его, а не «интерпретировать» его.

Как только вы нажмете [ENTER], вы сможете нажать клавишу [BACKSPACE] и вернуть ее / удалить все, что вы ввели.

Вы можете установить это в своей оболочке.

Теперь, если вы все еще используете VI, иногда перевод не работает, и вам действительно нужно набрать ^ H в vi, но это нормально.

Вы могли бы сказать:

стереть стереть к [ENTER]

и он буквально перевел бы 'k' в символ стирания / удаления ..

-D

0
user327463

Ok, I had this issue with manually updating a Cygwin install. Anyway I found this post, which lead me to the solution for my install.

The older cygwin had a file /etc/terminfo/c/cygwin, but in the newer cygwin it expected the file to be /etc/terminfo/63/cygwin.

Once I copied the "cygwin" file to this location, the bash shell backspace key worked fine, as did tab and others.

0
Argon

Изменение TERMпеременной cygwinи добавление SET TERM=cygwinв .batфайл не помогло мне, но я исправил это. Вот что я сделал: в диспетчере пакетов из-за установки я выбрал установку xterm: X11 terminal emulator, после установки я добавил SET TERM=xtermв .batфайл (как предложено выше), запустил терминал и в меню « Настройки» -> « Терминал»Type=xterm, затем перезапустил терминал. Backspace начал работать правильно!

Примечание: если вы уже установили cygwin - просто запустите установщик снова и добавьте пакет xterm.

Я бегу:

  • ОС = Windows 8 (x64)
  • Cygwin setup.exe версия = 2.850 (x64)
  • Mitty версия = 1.2-бета1 (x86_64-pc-cygwin)
0
2991ambusher

I agree with all the answers here. But there is a far simpler way found here: http://lifepluslinux.blogspot.in/2014/08/backspace-doesnt-work-in-vim-on-cygwin.html

0
bjelli

Работал для меня: В командной строке Windows введите

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

Это добавит его в .bash_profile (не .bashrc, который у меня не сработал, и с разрывом лидирующей строки)

0
yellowandred

Потратив 2 дня на чтение материалов в Интернете. Я нашел этот, который работал для меня. Я не знаю, соответствует ли этот случай каждому. Но это сработало как обаяние для меня благодаря Юксель

Проблема была с файлами 'termInfo', Шаги, которые он предложил

  1. подтвердите, если проблема связана с терминалом, введя в CygWin Terminal, это должно дать (игнорируйте предупреждение)

    less my_session.log

ВНИМАНИЕ: терминал не полностью функционален

  1. Получите информацию о TermCap, к которому относится путь или каталог, введя приведенный ниже код в терминале CygWin.

    infocmp -C

вы должны либо получить

infocmp: не удалось открыть файл terminfo / usr / share / terminfo / 63 / cygwin

Или вы можете также получить что-то, начинающееся с текста типа «Реконструкция через infocmp ...»

  1. Запустите приведенный ниже код в терминале CygWin, чтобы запустить диагностику и получить дополнительную информацию о пути сохранения файлов.

    cygcheck -s

который должен ответить вам, как показано ниже текст

Диагностика конфигурации Cygwin

...

C: / cygwin / system binary, noacl

C: / cygwin / bin / usr / bin системный бинарный, noacl

C: / cygwin / lib / usr / lib бинарный файл системы, noacl

C: \ cygwin \ etc \ terminfo / usr / share / terminfo, двоичный файл системы, noacl

префикс cygdrive / бинарный код пользователя cygdrive, noacl, posix = 0, авто

...

  1. проверить на строку, аналогичную

C: \ cygwin \ etc \ terminfo / usr / share / terminfo, двоичный файл системы, noacl

из вывода, вы получили от 3-го шага. Теперь скопируйте все файлы и папки, которые существуют в / usr / share / terminfo, в папку C: \ cygwin \ etc \ terminfo - ПРИМЕЧАНИЕ: эта папка может отличаться от вашей в зависимости от установки