Ответ 1
:.!
работает как фильтр, но :.w !
(помните пространство!) просто передает результат. См. :help :w_c
. То есть.
:.w !/usr/bin/todo -
Цель состоит в том, чтобы использовать текущую строку как TODO и отправить ее в некоторую внешнюю программу. Что-то вроде этого:
:! /usr/bin/todo "content of current line"
Я знаю команду фильтрации, но это означает, что я хочу отредактировать текущий буфер, который мне не нужен (:.! действует как фильтр). Я знаю, как получить текущий файл с "%", но не существует способа получить какой-либо другой контент? Возможно, используя: execute...
:.!
работает как фильтр, но :.w !
(помните пространство!) просто передает результат. См. :help :w_c
. То есть.
:.w !/usr/bin/todo -
Вы можете вставить содержимое регистров в командную строку, поэтому выполните следующее:
"1y$ //yank current row to register 1
: CTRL-R 1 //CTRL-R followed by register id pastes register to command line
должен сделать трюк.
Вам может понравиться что-то вроде этих сопоставлений (т.е. сохранено в вашем .vimrc
или вставлено в приглашение :
):
cmap <C-R>' <C-R>=shellescape(getline('.'))<CR>
cmap <C-R><C-R>' <C-R><C-R>=shellescape(getline('.'))<CR>
После установки вы используете их следующим образом:
:!/usr/bin/todo ^R'
(введите фактический Control - R, где приведенный выше пример показывает ^R
).
Вы можете рассматривать их как версии режима командной строки управляемых регистром Control-R и Control-R Control-R (см. :help c_CTRL-R
и :help c_CTRL-R_CTRL-R
), где "мнимый" регистр '
всегда содержит содержимое текущей строки, указанное в кавычки.
Поскольку эти сопоставления используют тот же префикс, что и встроенные сопоставления (см. теги :help
, упомянутые выше), вы должны ввести окончательную одинарную кавычку в пределах timeoutlen
миллисекунд (см. :set timeoutlen?
), или по умолчанию встроенное отображение (см. :help map-typing
).