В :help :normal
соответствующий текст:
{commands} should be a complete command. If
{commands} does not finish a command, the last one
will be aborted as if <Esc> or <C-C> was typed.
Строка команды, которую вы указываете normal
, должна быть полной командой, или она прерывается. Однако normal! /something
не завершено; если бы вы печатали его, Вим бы ждал, когда вы закончите. Вы можете нажать Esc или Ctrl - C для отмены. Или вы можете завершить его, нажав Enter . Таким образом, команда не завершена и прерывается вместо прыжка. Чтобы завершить его, введите желаемое значение Enter (в командной строке):
:normal! /something^M
Вы можете получить ^M
, набрав Ctrl - V , а затем Введите . (Если в Windows и Ctrl - V , используйте Ctrl - Q .) Затем вам нужно будет нажать Введите еще раз, чтобы завершить всю команду. Если бы вы использовали execute
, вы могли бы сделать это с помощью:
:execute "normal! /something\<cr>"
Обязательно используйте двойные кавычки, чтобы \<cr>
был интерпретирован правильно.
Я полагаю, что ваш второй вопрос - это то же самое. Буквально напечатанный <cr>
не влияет на эту ситуацию, вам просто нужно указать возврат каретки, который завершит команду поиска, или normal
прервет ее.
Поскольку вы пометили этот вопрос vimscript , я предполагаю, что по крайней мере часть вашего интереса заключается в использовании этого в сценарии. Возвращение буквального каретки в сценарий и правильная работа - это своего рода боль. В этих случаях я бы использовал execute
, как показано выше, поэтому вы можете использовать метод интерпретируемой строки с двойными кавычками для получения возврата каретки.
Что касается incsearch
, он не будет иметь эффекта, потому что вы не можете частично выполнять поиск с помощью normal
, как мы видели. Вы можете отправить только весь поиск. Однако он обновит регистр самого последнего поиска "/
, поэтому выделение будет обновляться правильно.