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

29

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

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

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

Ответы:

33

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

Ставить:

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

в .vimrc

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

vaichidrewar
источник
Спасибо, это сработало для меня - раньше, в Vim, моя клавиша возврата возвращалась вдоль линии, но не очищала буквы, пока я не начал печатать. Теперь он делает «обычный» забой.
Роберт
4
Хорошо, что этот ответ помог другим пользователям, но в данном случае это не решение вопроса, так как оригинальный вопрос не касается vim.
Келсин
Это также решило аналогичную проблему, с которой я столкнулся с клавишами курсора
Steve Paul
12

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

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

Это добавит это к .bashrcи все может работать хорошо!

Marrciovr
источник
1
У меня была TERMпеременная окружения, установленная msysчерез настройки переменных окружения Windows, как это было предложено в StackOverflow, чтобы помочь с gitпроблемами в Windows. Простой сброс в cygwinin .bashrcне помог, но удаление TERMзаписи из настроек Windows помогло . Спасибо, что указал мне правильное направление!
Флориан Брукер
Это решило тот факт, что cygwin64 игнорировал возвраты в командах, содержащих разрывы строк. Спасибо.
Суаник
11

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

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

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

SomeCallMeTim
источник
1
У меня были кастомные ncurses, которые я удалил. После удаления и переустановки через cygwin setup.exe у меня возникла эта проблема. Я не хочу применять bandaid, устанавливая переменные TERM для чего-то отличного от того, что работало до моей неудачи. Переустановка terminfo (я не смог найти termcap) сработала для меня. Благодарность!
Келсин
круто, работает, но почему ?!
Йордан Георгиев,
5

Отредактируйте ваш c: \ cygwin \ cygwin.bat

Поместите это: SET TERM=cygwin

до: bash --login -i

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

Когда вы устанавливаете тип 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

TekOps
источник
0

Хорошо, у меня была проблема с ручным обновлением установки Cygwin. В любом случае я нашел этот пост , который привел меня к решению для моей установки.

У более старого cygwin был файл /etc/terminfo/c/cygwin, но в более новом cygwin ожидалось, что файл будет /etc/terminfo/63/cygwin.

После того, как я скопировал файл "cygwin" в это место, клавиша Backspace оболочки bash работала нормально, как и Tab и другие.

user327463
источник
0

Изменение 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

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

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

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

bjelli
источник
0

Потратив 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 - ПРИМЕЧАНИЕ: эта папка может отличаться от вашей в зависимости от установки

yellowandred
источник
0

Пожалуйста, следуйте изображению ниже введите описание изображения здесь

  1. Щелкните правой кнопкой мыши в любом месте окна Cygwin
  2. щелчок options
  3. Нажмите на Keysвкладку
  4. ТИК Backarrow sends ^H
  5. Нажмите применить.

Это единственное, что сработало для меня, особенно если учесть, что если у вас есть SSH к серверу (не все исправления будут работать), я обычно добавлял stty erase ^?в свой .bashrc, но это только исправляло проблему в 80% случаев.

отметка
источник
-1

Никогда не сталкивался с вашей проблемой. Попробуйте установить эмулятор терминала Mintty ( http://code.google.com/p/mintty/ ).

Это доступно через установщик Cygwin. Лучший терминал для Cygwin.

Лучано Фиандезио
источник
Это не помогло.
user620189
Даже я застрял на той же самой проблеме, и от minty также не работает backspace. Я получаю пробел, когда нажимаю клавишу Backspace на терминале minty, а также на терминале cygwin
Рэйчел
@ Рейчел Вы когда-нибудь решали это? Я вижу ту же проблему со свежей установкой Cygwin. :(
SomeCallMeTim
@SomeCallMeTim: я смог решить эту проблему с помощью Minty, иногда Cygwin ведет себя очень странно.
Рейчел
@Rachel Спасибо, хотя я обнаружил, что моя проблема в том, что при установке Cygwin пропущены некоторые важные файлы (например, / usr / lib / terminfo). Я не знаю, почему они пропали без вести; нашел кого-то еще с этой проблемой, зашел в установку и сказал terminfo и termcap переустановить, и все заработало.
SomeCallMeTim