Натискання клавіш зі стрілками додає символи у редакторі vi


188

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

  • бо я отримую B,
  • бо я отримую A,
  • бо я отримую D,
  • бо я отримую С.

Будь ласка, допоможіть мені вирішити цю проблему.


3
Я добре посміявся, читаючи заголовок;) Я впевнений, що є XKCD для моторошного почуття, яке виникає (для початківців користувачів), коли клавіша зі стрілкою друкує букви.
vvy

1
Це дуже страшно;)
Кайл Бріденштейн

Відповіді:


233

Якщо у вас ще немає .vimrcфайлу у вашому домашньому каталозі, створіть його за допомогою цього:

vim ~/.vimrc

Додайте цей рядок у верхню частину файлу:

set nocompatible

Збережіть файл, і це має вирішити проблему. :)


1
Мені довелося створити .exrc файл для vi, але набір несумісних працював чудово.
tgun926

25
Існує хитрість, якщо ви використовуєте viзамість цього vim, ви повинні зробити ту саму конфігурацію, але у ~/.exrcфайлі.
ци

15
Працювали. Але чому це виправлення потрібно? Чому за замовчуванням він не обробляє стрілки?
Мохіт

6
За замовчуванням vi / vim запрограмований на заміну клавіш зі стрілками клавішами h, j, k, l. Це робиться, щоб вам не довелося рухатись від основної клавіатурної області клавіатури.
Гаурав Манчанда

10
наступна проблема - це зворотний простір
daVe

87

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

sudo apt-get install vim

На ютубі чи в Інтернеті є багато хороших навчальних посібників з vim / vi. Про вашу проблему дивіться тут

Потім продовжуйте відкривати файли, як зазвичай :

vi desired-file

працював на мене - хоча не впевнений, чому це відрізняється від vim, який я
запускав

6
Це має бути прийнятою відповіддю (але, схоже, ніхто не приймає). це найпростіший / найчистіший спосіб отримати vim повністю «модернізований» до консолі комп'ютера (замість терміналів епохи tty / ANSI.
Lockszmith

так, я згоден з вами Локзсмітом, це має бути прийнятою відповіддю
niccolo m.

Це працювало для мене. Я здивований, що raspian постачається з версією vi / vim, яку він робить ... хоча всі підручники для нього говорять про використання нано, що важко стверджувати, що vim насправді кращий за нього. Мабуть, єдина причина, що я використовую vim, а не нано, це те, що vim завжди є на кожній машині, і, здається, шанс 50/50 є нано.
ArtOfWarfare

BLEEPIN 'КОМП'ЮТЕР!
Кріс

27

При viнатисканні на кнопку iви активуєте команду Вставити текст.
Ця команда дозволяє вставити текст у файл.
І правильно, натискаючи:

  • на ній буде вставлено "A",
  • на ній буде вставлено "B",
  • ...

До деактивації цієї команди.
Щоб вимкнути команду в vi: просто натисніть на Esc
І тоді ви отримаєте нормальне використання своїх клавіш зі стрілками:

  • йти вгору,
  • спуститися,
  • ...

FYI, ось кілька viкоманд:
З цього джерела .

:xReturn вийти з vi , виписати модифікований файл у файл, названий в оригінальному виклику,
:wqReturn вийти vi , записати модифікований файл у файл, названий в оригінальному виклику,
:qReturn вийти (або вийти) vi
:q!Return вийти 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 копіювати (вибивати, вирізати) поточний рядок у буферній
Nyy копії (вибивати, вирізати) наступні N рядків, включаючи поточний рядок, у буфер
p вставляти рядки (-и) у буфер у текст після поточний рядок

0(нуль) переміщення курсору до початку поточного рядка (той, що курсор)
$ переміщення курсору до кінця поточного рядка
w переміщення курсору до початку наступного слова
b переміщення курсору назад до початку попереднього слова
:0Returnабо 1G переміщення курсору до першого рядка у файлі
:nReturnабо nG переміщення курсору до рядка n
:$Returnабо G переміщення курсору до останнього рядка у файлі

/string пошук вперед для появи рядка в тексті
?string пошуку назад для появи рядка в тексті
n переміщення до наступного появи рядка пошуку
N переміщення до наступного появи рядка пошуку в зворотному напрямку


28
Клавіша зі стрілкою вниз вставляючи "B" - це не очікувана поведінка. Клавіші зі стрілками повинні рухатися курсорами вгору та вниз / вліво та вправо, незалежно від режиму вставки.
Джеймс Вонг

2
@JamesWong На насправді, це очікуване поведінка, оскільки це як Vi був спочатку запрограмований. VIM, (неофіційно) наступник Vi, за замовчуванням перебуває у сумісному режимі Vi, який включає цю поведінку для клавіш зі стрілками. Отже, слово "повинно" є лише суб'єктивним, оскільки VIM насправді робить те, що було цілеспрямовано запрограмовано.
villapx

2
@villapx - Ні, це не очікувана поведінка. Очікувана поведінка визначається тим, що очікує ваш типовий користувач. Типова особа, яка використовує vi / vim, використовує його, тому що саме це встановлено на сервері, що їм потрібно швидко налаштувати, і вони не будуть робити достатньо, щоб зайнятися встановленням чогось іншого. Мало хто насправді вирішує використовувати vim, коли їм надано можливість, а менша кількість насправді знає всі ці особливості або примхи. Типовий користувач очікує, що стрілки переміщать курсор - така очікувана поведінка. Все інше - це несподівана поведінка, і його слід записувати як помилку наскільки це несподівано.
ArtOfWarfare

@ArtOfWarfare Ви можете визначати "очікувані", що завгодно. Я визначаю це як те, що очікує автор коду, оскільки в посібнику VIM їм було цілком зрозуміло, як це має поводитися ... з :help compatible: "За замовчуванням ця опція увімкнена, а параметри Vi використовуються для Параметри. Цей за замовчуванням було обрано для тих, хто хоче використовувати Vim так само, як і Vi, і навіть не хочуть (хотіли) знати про "сумісний" варіант ".
villapx

@ArtOfWarfare В принципі, VIM автор явно мав певну аудиторію на увазі при написанні цієї частини коду, і тільки тому , що публіка відрізняється від того, що ваша аудиторія буде, не означає , що це помилка. Ви можете подати його як помилку, якщо хочете, але будьте готові до того, що його постраждають фундаменталісти VIM (і справді кожен, хто поважає "керівництво", а-ля прихильники RTFM).
villapx

17

Для відключення друку букв на натисканні стрілок у режимі редагування ви можете виконати наступне

vi $HOME/.exrc 

(створіть файл, якщо його не існує), а потім додайте set nocompatibleдо нього рядок і збережіть.


Я поклав це у .vimrc. Чому ви ставите його в .exrc?
pauljohn32

Джерела Vim обидва - див. Вихід :versionдля порядку завантаження (також :h .exrcабо :h init). Я припускаю, що хтось може захотіти, щоб налаштування застосовувалося як vi, так і vim, або це може бути силою звички.
Вільям Робертсон

11

У редакторі vi є три режими, а саме:

  • командний режим
  • режим введення
  • режим за замовчуванням.

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

Причиною "B" може бути те, що клавіші зі стрілками в режимі введення не функціонують як клавіші зі стрілками, тому просто натисніть, Escщоб будь-коли перейти в режим за замовчуванням. Коли для переходу в режим введення натисніть iабо a, а також для навігації просто натисніть iклавіші ключ і використовуйте стрілки або h, j, k, l.


7

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

Після того як це з’ясували

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

Викликає таку дивну поведінку VI, я встановив дані консолі пакета, що вирішує проблему!

sudo apt-get install console-data

3

Примітка:

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


Ось пояснення :

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

Ймовірно, як ви виявили свою поведінку :

Для того, щоб ви виявили цю проблему, ви натиснули " i ", щоб увійти в режим вставки, а потім використали клавіші зі стрілками для навігації по правильному рядку та редагуванню точки. Саме це спричинило вашу несподівану проблему із чарами.

Рішення 1 або 2

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

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

Я не можу наголосити, щоб прочитати посібник (довідкові сторінки) або використовувати -h для допомоги. Після того, як ви пристосуєтесь до шаблонів оболонки, сторінки чоловіка стають вашим найкращим другом. Приклад: 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 без цього "ой!" мить. Ви завжди можете видалити псевдонім пізніше.

Тип vim .bashrc. Перемістіться вниз до порожнього рядка лише ~(або до будь-якого іншого рядка, який починається з alias(таким чином вони згруповані разом), а потім натисніть клавішу i, щоб увійти в режим -встановлення. У своєму окремому рядку введіть наступне:

alias vi='vim'

Натисніть, Escа потім введіть :wq. Тепер потрібно перезавантажити файл. Введіть source .bashrcбудь-яку іншу оболонку, яка відкриється після внесення цих змін, автоматично завантажить файл .bashrc.


3

Всі наведені пояснення трохи химерні. У мене встановлено 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

1
Я не впевнений, що таке химерне. Ви, нарешті, пропонуєте 1. встановити Vim - askubuntu.com/a/220072/158442 , 2. створити ~/.vimrcта встановити nocompatible: askubuntu.com/a/353944/158442 , або 3. редагувати системний файл. Лише пропозиція редагувати /etc/vim/vimrc.tinyнове, і все ж ви називаєте відповіді химерними, пропонуючи те саме, що і вони.
muru

1

Традиційний редактор vi не розпізнає клавіші зі стрілками (... afair). Є два рішення:

  1. використовувати vim замість vi
  2. використовуйте h, j, k і l для навігації (ви не можете переміщуватися під час редагування на традиційному vi btw.)

Це неправда. Шукайте програми на основі terminfo / termcap та libcurses. Я використовую vi з 1990 року в Xenix, SCO Unix, AIX, старому hpux та інших, а pure-vi з 80-х вже підтримують терміни / termincap відображення.
Лучано

@ james-wong добре, тоді я повинен перефразувати свою відповідь. "Чистий vi під Ubuntu не ..."
MadMike

... і це малося на увазі як коментар до @luciano
MadMike

1

Це також може бути пов'язано зі TERMзмінною; встановіть його наприклад так:

 export TERM=xterm

Це вирішило проблему для мене там, де інших відповідей не було. Дякую!
greg

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 зчитування послідовності відходу як послідовності буквального <ESC> <O> <A> тощо.

Джерело: https://hea-www.harvard.edu/~fine/Tech/vi.html


1

Для VI створіть або відредагуйте файл "~ / .exrc" або VIM, створіть або відредагуйте файл "~ / .vimrc", встановіть або додайте у рядку.

set nocompatible

На момент написання цього повідомлення є похвальні відгуки щодо другого найбільш голосового пункту, які цікавляться, чому їхній запис не був прийнятий Причиною є те, що є хости, які не дозволяють встановлювати інші редактори. Навіть тоді vim іноді має однакові ефекти, тому з двох кращих записів є купа корисної інформації. Я не можу коментувати, проте, сподіваюсь, це очищає причини, чому жоден з них не відповідає 100% часу.


0

На цій машині мені довелося це make sureзробити

set nocompatible

є last entry in ~/.vimrc. Або хоча б один з останніх записів, зокрема більше не буде завантажений плагін.

HTH


0

Чомусь Ubuntu опустив ініціалізацію envvar HOME для користувача root на моїй новій 18.04 VPS. Якщо це так, vi не може знайти файл .vimrc. Проблема не виникає для звичайних користувачів (в / вдома /).

Щоб перевірити змінну:

echo $HOME

Якщо це призведе до порожнього рядка, змінна не встановлюється. Проблема пішла після

export HOME=/root

Я перемістив команду у файл /root/.bashrc (я не знаю, де це правило встановлено).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.