Редактор VI: перейти к EOL вместо последнего символа

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

Я хочу знать не как перейти к последнему символу в строке, а к одному символу после него. Потому что ввод $ НЕ перемещает курсор вставки на последний символ в строке, и это легко доказать. Я использую vi на MSYS прямо сейчас.

Если я наберу строку

This is a test

и нажмите esc, $, i и <enter>, я получу следующее:

This is a tes
t

Это показывает, что курсор вставки был не помещен в конец строки, а один слева от последнего символа в строке (представьте, что поле представляет собой строку, как в Notepad++. в верхней части буквы, что означает, что символ будет вставлен в область, которая составляет левую часть поля), и я знаю это, потому что, если бы он был действительно в конце («конец» означает ПРАВО от последнего символа) последний символ не будет перемещен в отдельную строку, как вы видите выше.

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

Как это исправить? Можно ли настроить этот параметр в .exrc?


person Dylan LaCoursiere    schedule 25.04.2014    source источник
comment
Это комментарий, а не ответ, потому что я не знаю, насколько это применимо к исходному vi (я использую vim), но когда вы используете i, он вставляет перед символ, на котором вы находитесь. Используйте a для вставки после (добавления) и A для добавления в конец текущей строки (после $).   -  person Two-Bit Alchemist    schedule 25.04.2014
comment
Я не знаю наверняка о простом старом vi, но разве вы не можете набрать A в командном режиме? Это должно поставить вас после последнего символа в режим вставки. Если это не сработает, введите <Esc>$a, что должно сделать то же самое.   -  person Rick    schedule 25.04.2014
comment
Насколько мне известно, и i, и a переводят вас в режим вставки, разница в том, что i запускает вас перед текущим символом, а a запускает вас после.   -  person Rick    schedule 25.04.2014


Ответы (2)


Команда нормального режима для входа в режим вставки в конце строки — A.

В более общем случае i переходит в режим вставки перед текущим символом, поэтому то, что вы получаете, полностью соответствует тому, что вы делаете: $ помещает курсор на последний символ, а i переходит в режим вставки перед последним символом. Это то, что вы просите Vim сделать, и это то, что он делает.

Если вы хотите войти в режим вставки после текущего символа, правильная команда — a, так что вы должны были сделать вместо $i (которая не может делать то, что вы хотите, независимо от того, находитесь ли вы в vi или vim ) — это $a, для которого есть крутой ярлык: A.

person romainl    schedule 25.04.2014
comment
Меня меньше смущает, почему это не поведение vi по умолчанию, и больше смущает, почему, черт возьми, я не узнал об этом раньше после использования vi в течение двух лет. - person Dylan LaCoursiere; 25.04.2014
comment
@DylanLaCoursiere, iaIA<Esc>:w:q - это первые команды, которые нужно выучить. - person romainl; 25.04.2014
comment
@romainl, как ты выучил vim? У вас есть хороший ресурс для начинающих? - person jchook; 02.01.2020
comment
@jchook, 1. Если вы еще этого не сделали, повторите $ vimtutor столько раз, сколько потребуется, чтобы правильно понять основы. 2. Как указано в конце vimtutor, поднимитесь до руководства пользователя: :help user-manual. Он постепенно проведет вас через каждую функцию, от базовой до расширенной. Но это не роман: идите в своем темпе, пропускайте главы, возвращайтесь к ним позже и, самое главное, экспериментируйте по ходу дела. 3. Следите за антипаттернами и неэффективными действиями, находите улучшения, практикуйтесь. Ринс. Повторить. - person romainl; 02.01.2020

Я предполагаю, что вы хотите использовать o, чтобы «открыть» новую строку. Однако я предоставил несколько способов вставки текста через vi

Вставить команды

Следует отметить, что курсор vi/vim устанавливается поверх символа, а не между символами, как в большинстве редакторов.

  • i вставить текст перед курсором
  • a добавить текст после курсора
  • I вставить текст перед первым непустым в строке
  • A добавить текст в конец строки
  • o начать новую строку ниже текущей и запустить режим вставки
  • O начать новую строку над текущей и запустить режим вставки
  • S/cc удалить текущую строку и начать вставку.
  • c{motion} удалить {motion} и запустить режим вставки. Читать как изменение
  • C Удалить от текущей позиции до конца строки и запустить режим вставки
  • s удалить символ под курсором и запустить режим вставки
  • r заменить один символ
  • R запустить режим замены. Думайте об этом как о перезаписи

Для справки по любой из этих команд введите :h {command}, поэтому справка по A будет :h A

person Peter Rincker    schedule 25.04.2014
comment
Я думаю, что OP хочет A, но все равно +1 для полного списка. - person Two-Bit Alchemist; 25.04.2014