Подтвердить что ты не робот

Отправить текущую строку во внешнюю команду в vim (без захвата)

Цель состоит в том, чтобы использовать текущую строку как TODO и отправить ее в некоторую внешнюю программу. Что-то вроде этого:

:! /usr/bin/todo "content of current line"

Я знаю команду фильтрации, но это означает, что я хочу отредактировать текущий буфер, который мне не нужен (:.! действует как фильтр). Я знаю, как получить текущий файл с "%", но не существует способа получить какой-либо другой контент? Возможно, используя: execute...

4b9b3361

Ответ 1

:.! работает как фильтр, но :.w ! (помните пространство!) просто передает результат. См. :help :w_c. То есть.

:.w !/usr/bin/todo -

Ответ 2

Вы можете вставить содержимое регистров в командную строку, поэтому выполните следующее:

"1y$  //yank current row to register 1
: CTRL-R 1  //CTRL-R followed by register id pastes register to command line

должен сделать трюк.

Ответ 3

Вам может понравиться что-то вроде этих сопоставлений (т.е. сохранено в вашем .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).