Перемещение в начало строки в режиме Вставки

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

  • Home в режиме вставки
  • Esc + i, чтобы выйти из режима вставки и ввести его снова, эффективно перейдя к началу строки.

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

Любые мысли?

Ответ 1

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

Ответ 2

Вы можете войти в режим вставки с помощью I (столица i).

Он поместит курсор в начало строки.

Аналогичным образом вы можете использовать A, чтобы добавить что-то в конце строки.

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

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

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

inoremap <C-i> <Home>

Ответ 3

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

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

Ответ 4

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

Ответ 7

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

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

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

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 задерживаться при нажатии _, чтобы различать _ и __.

Ответ 8

ctrl+o then 0
     |      |
  letter  number