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

144

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

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

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

    
задан bvb 05.10.2013 в 07:04
источник

11 ответов

185

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

vim ~/.vimrc

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

set nocompatible

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

ответ дан Gaurav Manchanda 05.10.2013 в 09:23
49

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

sudo apt-get install vim

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

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

vi desired-file
    
ответ дан sthysel 21.11.2012 в 09:03
26

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

  • on он добавит «A»,
  • on он введет «B»,
  • ...

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

  • , чтобы перейти вверх,
  • , чтобы спуститься вниз,
  • ...

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

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

переместить курсор в одну строку
переместить курсор вверх на одну строку < br> переместить курсор слева один символ
переместить курсор вправо один символ
к югу>

u отменить все, что вы только что сделали; простой toggle
. redo , что вы только что сделали -

i вставить текст перед курсором, пока Esc не ударит текст I вставить текст в начале текущего line, пока Esc не ударит текст a добавить текст после курсора, пока Esc не ударит
A добавить до конца текущей строки до тех пор, пока Esc не удалите o open и не поместите текст в новую строку ниже текущей строки, пока Esc удаляет O open и помещает текст в новую строку над текущей строкой, пока 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 move курсор в строку n
:$ Возврат или G переместить курсор в последнюю строку в файле

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

    
ответ дан Boris 05.10.2013 в 08:52
16

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

vi $HOME/.exrc 

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

    
ответ дан Aniket Thakur 08.08.2015 в 14:46
11

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

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

Когда вы открываете файл, вы находитесь в режиме по умолчанию. Теперь, если вы хотите перейти к определенной позиции в тексте, просто используйте клавиши со стрелками или используйте h , j , k , l . Обратите внимание, что это будет работать только тогда, когда вы не нажали i (или любой другой входной режим ввода команды, например a , A , I ).

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

    
ответ дан ps_cool 21.11.2012 в 08:14
6

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

Узнав, что

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

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

sudo apt-get install console-data
    
ответ дан kitingChris 18.01.2017 в 11:53
3

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

Проверка альтернатив: /etc/alternatives/vi & rightarrow; /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
    
ответ дан Gunstick 10.01.2017 в 23:11
2

Примечание:

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

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

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

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

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

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

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

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

Я не могу достаточно подчеркнуть, чтобы прочитать руководство (справочные страницы) или использовать -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 (поэтому они сгруппированы вместе), а затем нажмите клавишу i , чтобы ввести -inert- В отдельной отдельной строке введите следующее:

alias vi='vim'

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

    
ответ дан D75 30.10.2016 в 05:20
1

Традиционный редактор vi не распознает клавиши со стрелками (... afair). Существует два решения:

  1. использовать vim вместо vi
  2. используйте h, j, k и l для навигации (вы не можете перемещаться во время редактирования на традиционном vi-btw.)
ответ дан MadMike 05.10.2013 в 07:51
1

В некоторых системах параметр nocompatible недоступен или может не исправить проблему, если плагин нарушает функциональность клавиши со стрелкой. Вот обходной путь ...

Отредактируйте файл .exrc , чтобы включить следующие строки:

map! ^[OA ^[ka
map! ^[OB ^[ja
map! ^[OC ^[la
map! ^[OD ^[ha

Или, если проблема существует только в нормальном режиме, вы можете перейти на nmap и пропустить следующий a , как показано ниже:

nmap! ^[OA ^[k

и т. д.

Вот комбинации клавиш, необходимые для их создания (показывая только первый):

map! <CTRL-V><Up-Arrow> <CTRL-V><ESC>ka

Это ускользает от режима редактирования, перемещается в желаемом направлении и в режиме редактирования реентера. Это необходимо для преодоления Vi, считывающего escape-последовательность, как последовательность литерала < ESC > < A > < A & gt ;, и т. Д.

Источник: Ссылка

    
ответ дан Dominic Comtois 08.06.2017 в 04:33
1

Это также может быть связано с переменной TERM ; установите его, например, следующим образом:

 export TERM=xterm
    
ответ дан Jasper Nuyens 07.07.2017 в 15:54