отправить текущую строку во внешнюю команду в vim (без захвата) - PullRequest
23 голосов
/ 11 августа 2011

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

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

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

Ответы [ 3 ]

33 голосов
/ 11 августа 2011

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

:.w !/usr/bin/todo -
3 голосов
/ 11 августа 2011

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

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

должно помочь.

0 голосов
/ 11 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...