Вы можете сделать это, но это может быть немного сложнее, чем использовать простую команду, как вы это делали.
То, что вы пытались запустить, это команды обычного режима как команды выполнения.Это не сработает, как вы это сделали.Команды в обычном режиме (например, нажатие yw
) не будут работать в ex-командах.
Для запуска команд в обычном режиме в режиме ex-command вы должны использовать normal
команда (для получения дополнительной информации, вы можете увидеть :help normal
).Однако, даже если вы измените свою команду на использование команды нормального режима (что-то вроде :4,32 normal! yw
), она все равно не будет работать, так как она будет выполняться для каждой строки, каждый раз, когда выполняется предыдущее значение.
Вы можете выполнить желаемое действие, используя регистр vim, который добавит слово в каждый цикл (для получения дополнительной информации о регистрах вы можете прочитать :help registers
).
Чтобы сделать это, вы должны изменитькоманда должна быть чем-то вроде :3,32 normal! ^"Ayw
.
Чтобы разбить эту команду:
:
- войти в режим ex-command. 3,32
- Диапазон для запуска команды. normal!
- Фактическая команда для запуска.Запустите его без какого-либо пользовательского сопоставления, чтобы избежать сопоставлений, которые пересекают требуемое действие. ^
- Перейти к началу строки. "A
- Запустить рывок врегистр, добавляющий данные к ранее сохраненным в нем данным. yw
- восстановить текущее слово.
Позже, чтобы распечатать скопированные значения, вы должны использовать "ap
(в обычном режиме) в нужном месте.
Недостатки
Обратите внимание, что команда вставляет новое слово в регистры, игнорируя первое значение регистра.Это означает, что если регистр не был пустым после выполнения этой команды, все слова будут добавлены к текущему значению регистра.
Чтобы очистить предыдущее значение регистра, вы можете выполнить команду:
:let @a=''
перед запуском команды yank.
Автоматизация
Если вы хотите сделать это много раз, вы можете захотеть использовать простую функцию, которая сделает все за вас, вместо этого заставляя вас запускать обе команды каждый раз.
Простая функция, которая сделает это:
function! CopyFirst(register) range
execute "let @" . a:register. "=''"
execute a:firstline . "," . a:lastline . "normal! ^\"" . toupper(a:register) . "yw"
endfunction
Использование:
:3, 32 call Copyfirst('a')
"ap