Я пытаюсь понять, как я могу использовать оператор с последующим движением внутри отображения. Например:
nmap /c c{here we pending for a motion}/<C-r>"<CR>
Карта должна сделать следующее:
- Активируйте
c
оператора и прослушайте следующее движение; - Например, я могу напечатать здесь,
t,
чтобы изменить все до следующей запятой; - Перейти в режим вставки, удалив все между курсором и запятой;
- Удаленный текст автоматически ищется как шаблон
Проще говоря, после удаления движущегося текста я перехожу в режим вставки с выделенными вхождениями удаленного текста. Я был бы очень признателен, если бы кто-нибудь помог мне разобраться в этом деле.
ОБНОВИТЬ
Ответы - почти то, что я хочу. Но! Когда я нажимаю /cw
, введите слово вместо слова, затем нажмите <Esc>
. После того, как я ожидаю сделать то же самое со следующими вхождениями. Но после нажатия n
(перейти к следующему вхождению) и .
(повторить последнюю команду) он просто добавляет последний набранный текст вместо его замены. Основная цель картирования - использовать его n/N
и .
повторять. Я что-то пропустил?
источник
/c
иi
), vim's.
просто повторяет последний. Если вы хотите расширить его, проверьтеrepeat
плагин. @TimurFayzrakhmanov также есть:g
и:s
команды, может помочь вам тоже."
в вашем коде'let @/=@""'
? Я думал, что это возможно, например,silent exec 'normal!
[v]c'
, потому чтоc
оператор делает то, что я ожидаю, за исключением того, что он не добавляет измененный текст в шаблон поиска.""
была опечатка .. исправить .. Яc
тоже придумал , но он добавил пробел, потому чтоn-i-n-i
я думаю , что есть изменение режима ... сделайте тест, который вы увидите.d
наy
иstartinsert
наcall feedkeys("cgn", 'n')
(см. Мой ответ ниже)Проще реализовать (и документировать) сложные отображения с помощью функций:
Затем сделайте ваш вызов вызова этой функции:
Редактировать:
Если ваше намерение выполнить поиск и замену в большом количестве мест , где вы должны попробовать заменить команду:
:s
. Вы можете изменить свое отображение, чтобы скопировать визуальный выбор в шаблон поиска:источник
enter motion:
, он дал:t,ggVGJZZ
^ _ ^ Это общая проблема для объединения команд/cw
затем набираю что-то вместо слова, затем нажимаю<Esc>
. После того, как я хочу сделать то же самое со следующими вхождениями. Но после нажатияn
(перейти к следующему вхождению) и.
(повторить последнюю команду) он просто добавляет последний набранный текст вместо его замены. Основная цель картирования - использовать егоn/N
и.
повторять. Я что-то пропустил?.
повторить вашу команду.<CR>
сinput()
).Это решение работает с «повторить последнюю команду» (иначе
.
):При повторении вам даже не нужно использовать
n
, вы можете просто использовать.
для прямой выборки и замены следующего вхождения, если вы хотите идти быстрее.При желании, если вам нравится выделение соответствующих слов, вы можете заменить
'cgn'
на'n``cgn'
.источник