Vim: почему нет: "normal! I" введите режим вставки?
В vim
, если я выполнил следующее из командной строки
:normal! i
vim не входит в режим вставки. Аналогично команда
:normal! A
переместит курсор в конец строки, но курсор останется в режиме вставки.
Любые идеи, почему это не работает? В противном случае я хотел бы узнать альтернативный способ ввода режима вставки из тела функции vimscript (и режим вставки сохраняется после возврата функции, конечно).
Edit: Похоже, что :startinsert
заполнит вторую часть вопроса, но мне все еще интересно, как я могу сделать что-то вроде :normal! A
или :normal! A
и почему они работают не так, как ожидалось. Имитация "добавить" с движениями стрелок является плохим решением из-за таких вещей, как пустые строки и т.д.
Ответы
Ответ 1
Обычная команда считает завершение в режиме вставки неполной командой и прерывается. От help normal
:
{commands} должна быть полной командой. Если {команды} не завершите команду, последняя будет прервана, как если бы <Esc>
или <C-C>
был напечатан. Дисплей не обновляется, пока ": normal" занят. Эта подразумевает, что команда вставки должна быть завершена (чтобы запустить Insert mode, см. startinsert)
:startinsert
может быть командой, которую вы ищете.
:normal A
может быть достигнуто добавлением взрыва (!
) в startinsert
, как было предложено Инго Каркатом. От help startinsert
:
Когда! включен он работает как "A", присоединяется к строке.
Ответ 2
В дополнение к уже упомянутому startinsert
вы можете использовать feedkeys()
:
call feedkeys('A', 'n')
сделает то, что вы хотите, но добавленный вами ключ будет обработан только после завершения текущего script/function/mapping/etc.
Ответ 3
Вместо :normal A
используйте :startinsert!
(с !
). Он упоминается в справке.
Для :normal A
переместите курсор вправо, затем :startinsert
.
Ответ 4
перейти к определенному типу линии
vim -c "30"
Теперь вы будете в строке 30, введите режим вставки
vim -c "30" -c startinsert
Теперь вы находитесь в режиме вставки, удалите эту строку
vim -c "30" -c startinsert -c d1