Vim застряла в режиме вставки

52

Я использую Vim уже несколько месяцев через мой веб-хостинг (они разрешают доступ к замазке). Внезапно escapeключ стал не реагировать. Я не могу существовать вставки или любой другой режим, просто нажав escape. Я должен нажать, F1который вызывает помощь в Vim и пинает меня в командном режиме.

Я уверен, что моя клавиша ESC на клавиатуре работает нормально, так как все мои сочетания клавиш Windows, которые используют клавишу ESC, работают нормально.

Я знаю, что это нелепый вопрос, и я уверен, что есть еще много вопросов, касающихся решения. Что мне действительно нужно, так это твердое руководство относительно того, с чего начать.

Вещи, которые могут помочь:

  1. Я использую vim через шпаклевку
  2. Я вхожу в систему с помощью Jailshell
  3. Я не root
Леви Хэквит
источник
каковы настройки вашего терминала? то есть, что именно для переменной среды TERM установлено (в удаленной оболочке)?
шарлатан-кихот
Для $ TERM установлено значение 'xterm'
Леви Хэк с
Работает ли Ctrl-[? Что вы получите, если вы нажмете, а Ctrl-vзатем сбежите? Это должно показать как ^[.
Приостановлено до дальнейшего уведомления.
Ctrl- [работал. Раскачать! Это спасает меня от многих разочарований. Есть ли шанс, что вы можете объяснить, почему escбольше не работает? Кроме того, пожалуйста, оставьте свой комментарий в качестве ответа, чтобы я мог принять его.
Леви Хэк с
Моя первая мысль, когда я читал это: «О, он сломал свою кнопку« Вытащи меня отсюда »»
Даниил

Ответы:

16

Попробуйте использовать Ctrl-[вместо Esc.

Что является результатом:

python -c "print ord(raw_input('char '))"

когда вы нажимаете Escи Enter? Должно быть "27". Каков результат нажатия Ctrl-Vтогда Esc?

Вы проверили все настройки в PuTTY, чтобы убедиться, что они разумны?

Вы используете Bash в удаленной системе? Посмотрите на вывод

bind -p | grep -i '\\e' | less

и посмотрим, увидишь ли ты что-нибудь необычное. У вас есть файл с именем ~/.inputrc? Посмотрите на его содержимое, чтобы увидеть, если что-то необычное.

Посмотрите на себя ~/.vimrcи посмотрите, все ли в порядке, тоже.

Приостановлено до дальнейшего уведомления.
источник
Ctrl-c также должен завершить режим вставки (иногда '[' немного сложно получить на некоторых клавиатурах)
akira
1
Я запустил скрипт на python, и он вернулся как пустая строка. Как я могу это исправить? Я использую шпаклевку.
Кит
@Keith: Вы пробовали какие-либо другие диагностические предложения?
Приостановлено до дальнейшего уведомления.
Ctrl + [работал для меня по любой причине, понятия не имею, что я сделал, чтобы застрял мой Vim.
Дерек Адэйр
147

Я по ошибке нажал Ctrl+ sи застрял в режиме вставки. Чтобы выйти из этого используйте Ctrl+ q.

Bhaskar
источник
7
Это не режим вставки, это XOFF. Вы можете отключить управление программным потоком, выполнив stty -ixon(добавьте его в свой ~/.bashrc). Тогда это нажатие клавиши будет доступно, чтобы быть связанным с чем-то еще. По умолчанию в Bash он привязан к forward-search-history(противоположность Ctrl-r). Ctrl-q (Bash quoted-insert) также будет доступен.
Приостановлено до дальнейшего уведомления.
@DennisWilliamson Не было .bash_profileбы лучше? Нет необходимости отключать его в неинтерактивной оболочке, не так ли?
Петр Доброгост
1
@PiotrDobrogost: «Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, Bash читает и выполняет команды из ~ / .bashrc, если этот файл существует». .bash_profileвыполняется только тогда, когда Bash является оболочкой входа в систему. «Как правило, ваш ~ / .bash_profile содержит строку if [ -f ~/.bashrc ]; then . ~/.bashrc; fi»
приостановлено до дальнейшего уведомления.
@DennisWilliamson Вы правы. Я хотел сказать, что, возможно, есть смысл отключать управление программным потоком только в интерактивных оболочках. Если это так, то впоследствии имеет смысл найти способ определить, является ли оболочка интерактивной, и отключить управление программным потоком только в этом случае.
Петр Доброгост
@PiotrDobrogost: см. Мой ответ на вопрос «Как проверить в bash, работает ли оболочка в интерактивном режиме?»
Приостановлено до дальнейшего уведомления.
4

Возможно, вы используете режим вставки .

'insertmode' 'im' 'noinsertmode' 'noim'
boolean (по умолчанию отключено)
Обеспечивает работу Vim таким образом, что режим вставки является режимом по умолчанию. Полезно, если вы хотите использовать Vim в качестве немодального редактора. Используется для | evim |.
[...]
- Используйте CTRL-Oдля выполнения одной команды нормального режима | i_CTRL-O |). Когда это отображение, оно выполняется так, как будто «insertmode» отключен. Нормальный режим остается активным до тех пор, пока отображение не будет завершено. - Используйте CTRL-Lдля выполнения ряда команд в обычном режиме, затем используйте Escдля возврата в режим вставки. Обратите внимание, что CTRL-Lкурсор перемещается влево, как, например, когда «insertmode» не установлен. | i_CTRL-L |

Я предлагаю редактирование ~/.vimrcдобавить следующую строку:

set noinsertmode         "disable insert mode
песчаник
источник
1
В моем случае он застрял в режиме вставки, потому что я случайно использовал `-y` в командной строке. Как сказано в руководстве: -y Запустите Vim в простом режиме, точно так же, как исполняемый файл назывался« evim »или« eview ». Заставляет Vim вести себя как редактор типа click-and-type. Чтобы выйти из этого «режима легкости», просто используйте <kbd> CTRL </ kbd> + <kbd> l </ kbd> (L в нижнем регистре), как сказано + SandRock
ton
0

У меня была эта проблема, но я понял, что это случайное изменение режима ввода SCIM на «Other - RAW CODE». Я изменил его обратно на английский / клавиатура и больше не было проблем.

vim_user
источник