Переміщення на початок рядка в режимі вставки


83

Я знаю, що можу використовувати:

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

Але ні те, ні інше мене не задовольняють. У першому випадку мені доводиться нахиляти голову, щоб вдарити Home, тому що я не можу сліпо вдарити її. У другому випадку моя ліва рука повинна залишити домашній ряд, щоб вдарити Esc, що теж дратує.

Будь-які думки?


5
За допомогою 0 можна перейти до початку рядка, але це не в режимі вставки.
manku

3
І якщо ви виявите, що Esc також знаходиться далеко, ви можете використовувати Ctrl- [замість цього :)

3
Або краще, Ctrl-C працює як Esc. Або ще краще, встановіть Caps Lock на Esc.
Ерік Вілсон,

4
@manku ти не стільки відповів на його запитання, скільки не відповів на його запитання = P
puk

remap esc to jj, вам потрібно багато переходити між режимами у vim
kapil

Відповіді:


149

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


Ви можете зробити те саме, натиснувши Ctrl + c, I або Ctrl + [, I. Ctrl + c функціонально схожий на ESC, а Ctrl + [еквівалентно ESC.
sml

42
Або Ctrl-oслідують 0(трохи ефективніше, ніж Ctrl-oслідують Shift-I), оскільки ви автоматично повернетесь до режиму вставки. У деяких випадках, Ctrl-oпісля чого ^може бути краще (щоб перейти до першого символу рядка).
Джит

2
Ви можете використовувати Alt-A або Alt-I, перебуваючи в режимі вставки, якщо ваш ключ alt надсилає вхід (можна налаштувати в iTerm2)
Rivenfall

2
<C-O>це не те ж саме , як <C-[>і <Esc>хоча вони можуть виглядати однаково. Різниця полягає в редагуванні із звичайним екрануванням + <щось, щоб ви знову потрапили в режим вставки>, залишає вам дві редакції, тоді як <CO> залишає вам одну. Це може допомогти вам підтримувати чистішу історію скасування та мати можливість повторно використовувати цю вставку для вставки. Деякі vim'ers будуть стверджувати, що вам слід звертати увагу на подібні речі.
Nicolai S

Я не розумію. Як на Linux, так і на Mac OSX, ctrl + O не працює. Але якщо я натискаю клавішу ESCAPE, вона переходить у командний режим, а потім працює Shift + I.
Донато

51

Ви можете увійти в режим вставки, використовуючи I(велике i).

Він помістить курсор на початок рядка.

Подібним чином можна використовувати, Aщоб додати щось у кінці рядка.

Хоча це насправді не вирішує проблему переїзду, коли ви вже перебуваєте в режимі вставки.

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

Інша ідея: переформатувати нову команду лише в режимі вставки

inoremap <C-i> <Home>


1
Т. <kbd> I </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 Як ви переходите на початок нового рядка.
Сіт,

3

Якщо ви використовуєте термінал MacOS, перейдіть у меню "Налаштування ..."> "Налаштування"> "Клавіатура" та перейдіть на клавішу закінчення клавіші Ctrl-O $ (вона відображається як \ 017 $), а потім використовуйте клавіші fn + ліво для імітації клавіші завершення. Зробіть те ж саме для домашньої клавіші. Послідовність втечі \ 033 [H також працює для дому.


1
fn-Left та fn-Right працювали за замовчуванням для мене у vim на терміналі mac
Jeff



0

Якорий, який працював у мене (як м’язова пам’ять, так і інтуїтивність), полягає у нанесенні на карту __(що є подвійною _) для «вставки на початку поточного рядка».

Обґрунтування:

  • _ вже переходить на початок рядка
  • у 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 затримуватись при натисканні, _щоб розрізнити _і __.



0

Я використовую цю команду, щоб перейти до кінця рядка, не виходячи з режиму вставки

inoremap jl <esc><S-a>

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

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