странное поведение vi на OSX Debian ssh terminal

При создании swap-файла я выдаю vi /etc/fstab как root. Файл fstab подходит, отлично. Выполните G $ чтобы перейти к концу строки, и i чтобы войти в режим INSERT. Нажмите стрелку вправо, чтобы переместить курсор на один символ вправо. vi вставляет в C новую строку. Смущенный, я нажимаю клавишу со стрелкой влево. vi вставляет капитал B

Я довольно смущен. Где я даже начинаю выяснять, что здесь происходит? Мне нужно иметь возможность редактировать файлы с помощью vi .

3 Solutions collect form web for “странное поведение vi на OSX Debian ssh terminal”

OSX «vi» представляется vim. В его сообщении версии говорится (для El Capitan ):

 VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 27 2015 16:22:14) Compiled by root@apple.com Normal version without GUI. Features included (+) or not (-): 

Есть отдаленный шанс, что вы не используете vim, но никто не предложил правдоподобную альтернативу.

vim принимает последовательности клавиш курсора в режиме insert.

Однако одна из ошибок заключается в том, что фактическое поведение терминала не соответствует набору описаний терминала с переменной окружения TERM . Например, описание термина «linux» не использует режим приложения , и если вы установили TERM на то, что, фактически работая в терминале, который был инициализирован для использования режима приложения , vim не ожидает последовательности выхода O B , поскольку он ищет спасения [ B. В результате вы получите букву B нажимая клавишу со стрелкой вниз.

Дальнейшее чтение:

  • Мои клавиши курсора не работают (часто задаваемые вопросы о ncurses)
  • 2. Специальные специальные клавиши ins-special-special (vim-документация)

Вы можете использовать vim, который улучшен, и может использовать клавиши со стрелками vi в качестве ключей по hjkl для hjkl чтобы переместить курсор. Если vi с псевдонимом vim, проверьте с помощью

 alias vi 

Поэтому отредактируйте $HOME/.vimrc и поместите в эту строку

 set nocompatible 

Если вы заинтересованы в unix, я обычно использую этот vimrc

 set nocompatible set backspace=indent,eol,start syntax on imap <esc>OH <esc>0i cmap <esc>OH <home> nmap <esc>OH 0 nmap <esc>OF $ imap <esc>OF <esc>$a cmap <esc>OF <end> 

Клавиши со стрелками определяются в вашем termcap (5) как escape-последовательности. Это настройка по умолчанию VT100. Вы можете увидеть последовательность в терминале с помощью: ^ v, за которой следует что угодно. Правая стрелка в языке VT100 – это ^ [[C (^ [) – побег. Обратите внимание, что это говорит vi (1), чтобы выйти из вставки, переместить абзац (по крайней мере, ни одна строка в этом случае) и перейти к концу строки. Подобные неожиданные результаты возникают при использовании функциональных клавиш в любой программе, не предназначенной для их обработки.

Существует 2 решения этой проблемы, которые не являются ни ОС, ни программами, ни терминальными. Первое решение – использовать vi (1), который знает, как справляться с навигацией в режиме вставки. vim (1) является одним из таких vi (1). Он хорошо работает с эмуляторами w / vt100 и имеет собственный графический интерфейс, если вы хотите установить его таким образом. Тем не менее многие считают vim (1) вирусами; находя его медленным и тяжелым. Другие, вероятно, более раздутые варианты включают Eclipse (1) w / vwrapper plugin и emacs (1) с плагином Viper.

Другим решением является использование vi (1), поскольку оно предназначалось для использования на реальных VT100. Не используйте стрелки или другие многофункциональные функциональные клавиши в режиме вставки. Последовательность клавиш в вопросе:

G – перейти к последней строке файла $ – перейти к последнему символу текущей строки i – вставить перед текущим символом

неверно для задачи. Вместо того, чтобы использовать a – добавить текущий символ, поэтому клавиша со стрелкой не нужна, чтобы пройти последний символ на линии.

ИЛИ, еще лучше

G – последняя строка A – добавить текущую строку

  • Прокомментировать все строки в текстовом файле?
  • Ошибка при поиске несуществующей строки с EDITOR = vi crontab -e
  • Как вставить переменную vimscript и строку в vim искать и заменять
  • Использует ли ctrl + c вместо esc для выхода из режима вставки, что-нибудь в vi?
  • Binding Shift-Enter для вставки новой строки без оценки текущего выражения
  • Как переписать строки текста в vi / vim?
  • `crontab -e: E212: не удается открыть файл для записи` при использовании gvim (работает с vi)
  • Как прокомментировать строку на основе слова, с которого оно начинается?
  • VIM заменяет появление шаблона после определенного слова в строке
  • Можно ли добавить ci "(или ci ', ci {и т. Д.) В режим vi в bash?
  • Является ли изучение текстового редактора, такого как vi, необходимым и все еще стоит того времени?
  • Проблемы с Gnu Screen и vi - визуализация
  • Linux и Unix - лучшая ОС в мире.