Вопрос Нажатие клавиш со стрелками добавляет символы в редакторе vi


Когда я пытался использовать клавиши со стрелками в режиме вставки vi редактор в редакторе вставляются следующие символы:

  • для  Я получаю B,
  • для  Я получаю A,
  • для  Я получаю D,
  • для  Я получаю C.

Пожалуйста, помогите мне в решении этой проблемы.


143
2017-10-05 05:04


происхождения


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


ответы:


Если у вас еще нет .vimrc файл в вашем домашнем каталоге, создайте его с помощью этого:

vim ~/.vimrc

Добавьте эту строку в начало файла:

set nocompatible

Сохраните файл, и это должно устранить проблему для вас. :)


178
2017-10-05 07:23



Мне пришлось создать файл .exrc для vi, но установить nocompatible отлично. - tgun926
Есть трюк, если вы используете vi вместо vim, вы должны выполнить ту же конфигурацию, но в ~/.exrc файл. - tzi
Работал. Но почему это исправление требуется? Почему по умолчанию он не обрабатывает стрелки? - Mohit
По умолчанию vi / vim запрограммирован на замену клавиш со стрелками клавиш h, j, k, l. Это делается, поэтому вам не нужно перемещаться из основной области клавиатуры. - Gaurav Manchanda
следующая проблема - это backspace, решение: askubuntu.com/questions/296385/... - daVe


Установить vim -> Это устранит проблему.

sudo apt-get install vim

Есть много хороших обучающих программ vim / vi на youtube или в Интернете в целом. Для вашей проблемы, глянь сюда

Затем продолжайте открывать файлы как обычно:

vi desired-file

47
2017-11-21 08:03



работал для меня - хотя и не уверен, почему это отличается от vim, который я запускал ранее - Amos Folarin
Это должен быть принятый ответ (но похоже, что никто не принимает). это самый простой / самый чистый способ получить «полностью модернизированный» vim на компьютерную консоль (вместо терминалов tty / ANSI. - Lockszmith
да, я согласен с тобой, Локсмит, это должен был принять ответ - niccolo m.
Это сработало для меня. Я удивлен тем, что raspian поставляется с версией vi / vim, которую он делает ... хотя все учебные пособия для него говорят вам использовать nano, что трудно утверждать, что vim действительно лучше, чем он. Вероятно, единственная причина, по которой я использую vim, а не nano, - это то, что vim всегда находится на каждой машине, и кажется, что это 50/50 вероятность того, что nano. - ArtOfWarfare


С vi, при нажатии я вы активируете команду Вставить текст.
Эта команда позволяет вставлять текст в ваш файл.
И правильно, при нажатии:

  • на  он будет вставлять «A»,
  • на  он будет вставлять «B»,
  • ...

До вы деактивируете эту команду.
Чтобы деактивировать команду в vi : просто нажмите Esc
И тогда вы вернете нормальное использование ваших клавиш со стрелками:

  •  подняться,
  •  спускаться,
  • ...

FYI, вот некоторые vi команды:
Из этого источник,

:xВернуть  выйти из vi, выписывая измененный файл в файл с именем в исходном вызове
:wqВернуть  выйти из vi, выписывая измененный файл в файл с именем в исходном вызове
:qВернуть  выйти (или выйти) vi
:q!Вернуть  выйти из vi даже если последние изменения не были сохранены для этого вызова vi

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

u  расстегивать что бы вы ни делали; простой переключатель
.  переделывать что бы вы ни делали

i  вставить текст перед курсором, пока Esc удар
I  вставить текст в начале текущей строки, пока Esc удар
a  присоединять текст после курсора, до Esc удар
A  присоединять текст до конца текущей строки, пока Esc удар
o  открытый и поместите текст в новую строку ниже текущей строки, пока Esc удар
O  открытый и поместить текст в новую строку над текущей строкой, пока Esc удар

r  замещать одиночный символ под курсором (нет Esc необходимо)
cw  изменение текущее слово с новым текстом, начиная с символа под курсором, до Esc удар
x  Удалить одиночный символ под курсором
Nx  Удалить N символов, начиная с символа под курсором
dw  Удалить одно слово, начинающееся с символа под курсором
C  изменение (заменить) символы в текущей строке, пока Esc удар
D  Удалить оставшаяся часть строки, начиная с текущей позиции курсора

dd  Удалить целая текущая линия
Ndd  Удалить N строк, начиная с текущей строки; например, 5dd удаляет 5 строк
yy  копия (yank, cut) текущая строка в буфер
Nyy  копия (yank, cut) следующие N строк, включая текущую строку, в буфер
p  вставитьстрока (строки) в буфере в текст после текущей строки

0 (нуль) переехать курсор для начала текущей строки (той, которая указана курсором)
$  переехать курсор до конца текущей строки
w  переехать курсор в начало следующего слова
b  переехать курсор назад к началу предыдущего слова
:0Вернуть или 1G  переехать курсор в первую строку в файле
:nВернуть или nG  переехать курсор в строку n
:$Вернуть или G  переехать курсор на последнюю строку в файле

/string  поиск forward для появления строки в тексте
?string  поиск назад для появления строки в тексте
n  переехать к следующему вхождению строки поиска
N  переехать к следующему вхождению строки поиска в противоположном направлении


26
2017-10-05 06:52



Вставка стрелки вниз «B» не является ожидаемым поведением. Клавиши со стрелками должны перемещать курсоры вверх и вниз / влево и вправо независимо от режима вставки. - James Wong
@JamesWong На самом деле, это является ожидаемое поведение, так как именно так Vi был запрограммирован. VIM, (неофициально) преемник Vi, по умолчанию находится в Vi-совместимом режиме, который включает это поведение для клавиш со стрелками. Таким образом, слово «должно» здесь просто субъективно, поскольку VIM фактически выполняет то, что он был запрограммирован специально. - villapx
@villapx - Нет, это не ожидаемое поведение. Ожидаемое поведение определяется тем, что ожидает ваш типичный пользователь. Типичный человек, использующий vi / vim, использует его, потому что это то, что установлено на сервере, который им нужно быстро настроить, и они не будут делать достаточно, чтобы потрудиться с установкой чего-то другого. Немногие на самом деле предпочитают использовать vim при предоставлении опции, и меньше на самом деле знают все эти функции или причуды. Обычный пользователь ожидает, что стрелки будут перемещать курсор - это ожидаемое поведение. Все остальное является неожиданным поведением и должно быть записано как ошибка для того, насколько это неожиданно. - ArtOfWarfare
@ArtOfWarfare Вы можете определить «ожидаемый», однако вы выбираете. Я определяю его как то, что ожидается автором кода, поскольку в руководстве VIM было совершенно ясно, как это должно вести себя ... от :help compatible: «По умолчанию эта опция включена, и для параметров используются значения по умолчанию. Это значение по умолчанию было выбрано для тех людей, которые хотят использовать Vim так же, как Vi, и даже не хотят (хотят) знать о« совместимой »опции «. - villapx
@ArtOfWarfare В принципе, автор VIM явно имел в виду особую аудиторию при написании этой части кода и просто потому, что эта аудитория отличается от того, что ваш аудитория была бы, не означает, что это ошибка. Вы можете подать его как ошибку, если хотите, но будьте готовы к тому, чтобы вас ругали фундаменталисты VIM (и действительно любой, кто уважает «руководство», a la RTFM aficionados). - villapx


Чтобы отключить печать букв при нажатии стрелок в режиме редактирования, вы можете сделать следующее

vi $HOME/.exrc 

(создайте файл, если он не существует), а затем добавьте строку set nocompatible к нему и сохранить.


16
2017-08-08 12:46



Это должен быть принятый ответ. Спасибо! - eis
Я положил это в .vimrc. Почему вы помещаете его в .exrc? - pauljohn32
Источники Vim - см. Вывод :version для порядка загрузки (также :h .exrc или :h init). Полагаю, кто-то может захотеть, чтобы установка применялась как в vi, так и в vim, или могла быть чистой привычкой. - William Robertson


В редакторе vi есть три режима:

  • командный режим
  • режим ввода
  • режим по умолчанию.

Когда вы открываете файл, вы находитесь в режиме по умолчанию. Теперь, если вы хотите перейти к определенной позиции в тексте, просто используйте клавиши со стрелками или используйте час, J, К, L ключи. Обратите внимание, что это будет работать только тогда, когда вы не нажали я (или любой другой входной режим, вводящий команду, например , , я).

Причина «B» может быть вызвана тем, что клавиши со стрелками в режиме ввода не работают как клавиши со стрелками, поэтому просто нажмите Esc чтобы перейти в режим по умолчанию в любое время. Когда для перехода в режим ввода нажмите я или , а для навигации просто нажмите я и используйте клавиши со стрелками или час, J, К, L,


11
2017-11-21 07:14





У меня была такая же проблема, но не только на моей локальной машине, но и на соединениях через шпатлевку на машине sles в Win7 VM поверх приемника citrix. Как локальный хост, так и удаленные хосты показывают после переустановки Ubuntu ту же проблему.

Узнав, что

$ localectl list-keymaps 
Couldn't find any console keymaps.

Вызывает это странное поведение VI. Я установил пакетные данные пакета, которые решают проблему!

sudo apt-get install console-data

6
2018-01-18 10:53





Все приведенные объяснения немного странны. У меня есть vi, но не vim.

Проверка альтернатив: /etc/alternatives/vi &правая стрелка /usr/bin/vim.tiny

Так vi является vim.tiny, и он использует /etc/vim/vimrc.tiny,

И в vimrc.tiny вы найдете следующую строку:

set compatible

Это почти единственное в этом файле. Заметим, что в /etc/vim/vimrc он использует nocompatible,

Поэтому либо установите vim, либо измените vimrc.tiny файл или создать собственный ~/.vimrc который должен содержать строку:

set nocompatible

3
2018-01-10 22:11



Я не уверен, что это так странно. В итоге вы предлагаете 1. установить Vim - askubuntu.com/a/220072/158442, 2. создание ~/.vimrc и установка nocompatible: askubuntu.com/a/353944/158442, или 3. редактирование системного файла. Только предложение изменить /etc/vim/vimrc.tiny является новым, и все же вы называете ответы странными, предлагая то же самое, что и они. - muru


Заметка:

В других сообщениях есть хорошая информация, но ни одна из должностей не пыталась объяснить Зачем такое поведение произошло. В будущем многие люди будут спотыкаться об этом. Кроме того, вы могли бы пометить этот вопрос как разрешенный, поскольку любой из предыдущих сообщений, вероятно, помог вам?


Вот объяснение:

VI является редактором, который был вокруг долгое время, с корнями в системы Unix. Это хороший инструмент, но он повторяется, и теперь лучше. напор была написана позже и является той итерацией. Люди обычно называют vi «vim-minimal», а vim - «улучшенной» версией vi. Вы можете думать об этом так: vi - это ядро, и vim расширяет его.

Вероятно, как вы обнаружили поведение:

Чтобы вы обнаружили эту проблему, вы нажали кнопку "я"войти в вставить и затем используйте клавиши со стрелками для навигации по правильной линии и точке редактирования. Это и послужило причиной неожиданного возникновения проблемы.

Решение 1 или 2

1) vi someFile При использовании VI, сначала перейдите в точку редактирования, затем войдите в режим вставки.

2) vim someFile Просто используйте напор от начала.

Я не могу достаточно подчеркнуть, чтобы прочитать руководство (страницы руководства) или использовать -h для получения справки. Как только вы приспособитесь к шаблонам в оболочке, страницы man станут вашим лучшим другом. Пример: man vi или man vim


Подтвердите, что Vim установлен,

Откройте окно консоли и выполните:

dpkg --list | grep vim

Если вы получите что-то похожее на это, то вы можете просто начать использовать vim.

~ $ dpkg --list | grep vim
ii  vim         2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor
ii  vim-common  2:7.4.052-1ubuntu3  amd64  Vi IMproved - Common files
ii  vim-runtime 2:7.4.052-1ubuntu3  all    Vi IMproved - Runtime files
ii  vim-tiny    2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor - compact version

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

sudo apt-get update
sudo apt-get install vim

Во избежание того, что вы используете vi или vim только при поиске в Интернете, как исправить что-то, и вы случайно забыли ввести vim, есть один способ, которым вы можете исправить это на будущее. Я предупреждаю вас обратить внимание. Вы можете использовать псевдоним для перезаписи vi со ссылкой на vim, чтобы независимо от того, что вы вводите в нечастом будущем, вы получаете vim без этого «oops!». момент. Вы всегда можете удалить псевдоним позже.

Тип vim .bashrc, Переместитесь вниз к пустой строке только с ~ (или любой другой строке, которая начинается с alias (поэтому они сгруппированы вместе), а затем нажмите я для входа в режим ininsert. На отдельной отдельной строке введите следующее:

alias vi='vim'

Нажмите Esc и затем введите :wq, Теперь вам нужно перезагрузить файл. Тип source .bashrc Любая другая оболочка, которая открывается после внесения этих изменений, автоматически загрузит файл .bashrc.


2
2017-10-30 04:20