Перейти к началу строки в режиме вставки


83

Я знаю, что могу использовать:

  1. Home в режиме вставки
  2. Esc+ iдля выхода из режима вставки и повторного входа в него, фактически переходя в начало строки.

Но ни то, ни другое меня не удовлетворяет. В первом случае мне нужно наклонить голову, чтобы ударить Home, потому что я не могу ударить вслепую. Во втором случае левая рука должна покинуть домашний ряд, чтобы ударить Esc, что тоже раздражает.

Есть предположения?


5
Вы можете использовать 0 для перехода к началу строки, но это не в режиме вставки.
manku 01

3
И если вы обнаружите, что Esc

3
Или лучше, Ctrl-C работает как Esc. Или, что еще лучше, сопоставьте Caps Lock с Esc.
Эрик Уилсон

4
@manku ты не столько ответил на его вопрос, сколько не ответил на его вопрос = P
puk

переназначить esc на jj вам нужно много переключаться между режимами в vim
капил

Ответы:


149

Ctrl+ Oв режиме вставки переводит вас в командный режим только для одного нажатия клавиши. Следовательно, Ctrl+ Oзатем Shift+ Iдолжен выполнить то, что вы ищете.


Вы можете сделать то же самое, нажав Ctrl + c, I или Ctrl + [, I. Ctrl + c функционально аналогичен ESC, а Ctrl + [эквивалентен ESC.
sml 01

42
Или с Ctrl-oпоследующим 0(немного более эффективным, чем Ctrl-oследует Shift-I), так как вы автоматически вернетесь в режим вставки. В некоторых случаях может быть лучше , если Ctrl-oследовать за ним ^(чтобы перейти к первому непробельному символу строки).
Jeet

2
вы можете использовать Alt-A или Alt-I в режиме вставки, если ваша клавиша alt отправляет escape (можно настроить в iTerm2)
Rivenfall

2
<C-O>не то же самое, <C-[>или <Esc>хотя они могут выглядеть одинаково. Разница в том, что редактирование с обычным escape-символом + <что-то, что снова вернет вас в режим вставки> оставляет вам две правки, а <CO> оставляет вам одну. Это может помочь вам поддерживать более чистую историю отмен и иметь возможность повторно использовать эту вставку для вставки. Некоторые vim'ers утверждают, что вам следует обращать внимание на подобные вещи.
Nicolai S

Я не понимаю И в Linux, и в Mac OSX ctrl + O не работает. Но если я нажимаю клавишу ESCAPE, он переходит в командный режим, а затем Shift + I работает.
Donato

51

Вы можете войти в режим вставки, используя I(заглавную i).

Курсор будет помещен в начало строки.

Точно так же вы можете Aдобавить что-нибудь в конце строки.

Хотя это не совсем решает проблему перемещения в режиме вставки.

Я только что проверил справку по режиму вставки, в режиме вставки нет комбинации клавиш для перемещения в начало строки.

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

inoremap <C-i> <Home>


1
T. <kbd> Я </kbd> работает нормально, но я ищу решение для перехода к началу строки, уже находясь в режиме вставки.
Валентин Васильев

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

24

У меня Ctrl + a и Ctrl + e сопоставлены с началом и концом строки соответственно. Это соответствует поведению большинства командных строк bash. У меня хорошо работает.

inoremap <C-e> <Esc>A
inoremap <C-a> <Esc>I

Если я не ошибаюсь, это привязки клавиш и для большинства других редакторов. Я собираюсь добавить их в свой файл vimrc.
Аарон

2
Это обычное поведение Emacs. Большинство браузеров также поддерживают их в различных типах текстовых полей. Я не думаю, что это плохая идея, но вот чего вы упускаете: <C-e>копирует / записывает символ под курсором ( <C-y>для над курсором), <C-a>вставляет все, что есть в вашем.-Регистре (точка-регистр). Этот регистр заполняется тем, что вы только что набрали, когда вы выходите из режима вставки (даже при использовании Ctrl-c (к которому вам по многим причинам не следует привыкать)).
Nicolai S

@Jonathan Cutrell Как перейти к началу новой строки.
Sayth

3

Если вы используете терминал MacOS, перейдите в «Настройки ...> Настройки> Клавиатура» и сопоставьте конечную клавишу с Ctrl-O $ (она отображается как \ 017 $), а затем используйте fn + left для имитации конечной клавиши. Сделайте то же самое для домашнего ключа. Escape-последовательность \ 033 [H также работает для дома.


1
fn-Left и fn-Right работали у меня по умолчанию в vim на терминале Mac
Джефф



0

У меня сработал ярлык (как мышечная память, так и интуитивность) - это отображение __(что является двойным_ ), чтобы «вставить в начало текущей строки».

Обоснование:

  • _ уже идет в начало строки
  • в vim удвоение чего-либо - очень распространенный способ сделать это "до этой строки"
  • двойной _ не конфликтует ни с какими движениями (вы уже в начале строки)
  • ваша рука уже находится в нужном месте, если вы перешли в начало строки и теперь хотите вставить.

vimscript:

"insert at start of current line by typing in __ (two underscores)
function DoubleUnderscore()
    if v:count == 0 && getcurpos()[2] == 1
        :silent call feedkeys('I', 'n')
    else
        :silent call feedkeys('^', v:count + 'n')
    endif
endfunction
nnoremap <silent> _ :call DoubleUnderscore()<CR>

Это сложно, потому что простая альтернатива nnoremap __ _Iзаставляет vim задерживать нажатие, _чтобы различать _и __.



0

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

inoremap jl <esc><S-a>

Аналогично перейти к началу строки будет:

inoremap jl <esc><S-i>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.