Как вызвать внешнюю программу из vim с визуально отмеченным текстом в качестве параметра? - PullRequest
3 голосов
/ 16 ноября 2010

Вызов: path-to-programm visual-marked-text filetype directory

Пример: "C:\Programme\WinGrep\grep32.exe" search-pattern *.sql D:\MyProject\build

Ответы [ 4 ]

5 голосов
/ 16 ноября 2010

Вы выбираете текст и затем набираете:

:!<program>

Например, чтобы отсортировать строки, выделите их и введите:

:!sort

Обратите внимание, что заменит помеченный текст выводом внешней программы

4 голосов
/ 16 ноября 2010

Для этого можно использовать следующую функцию Vim-script.

function! FeedVisualCmd(cmdpat)
    let [qr, qt] = [getreg('"'), getregtype('"')]
    silent norm! gvy
    let cmd = printf(a:cmdpat, shellescape(@"))
    call setreg('"', qr, qt)
    echo system(cmd)
    if v:shell_error
        echohl ErrorMsg | echom 'Failed to run ' . cmd | echohl NONE
    endif
endfunction

Копирует текущий выбранный текст в безымянный регистр (см. :help ""), запускает данный шаблон команды через функцию printf, а затем выполняет результирующую команду, повторяя ее вывод.

Если единственная часть команды, которая изменяет это шаблон, удобно определить отображение,

vnoremap <leader>g :<c-u>call FeedVisualCmd('"C:\Programme\WinGrep\grep32.exe" %s *.sql D:\MyProject\build')<cr>
4 голосов
/ 16 ноября 2010

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

:!cmd Ctrl-R " [другие параметры]

0 голосов
/ 16 ноября 2010

Чтобы передать выделенный текст в качестве параметра, вы можете использовать xargs в Linux / Unix (или Cygwin в Windows) следующим образом:

:'<,'>!xargs -I {} path-to-program {} filetype directory

Вы вводите эту команду, выделяя текст в визуальном режиме и затем печатая :, ! и введите остальную часть команды.

{} часть команды будет заменена вводом команды xargs, которая является выделенным текстом. Таким образом, path-to-program будет выполнено с необходимыми параметрами в правильном порядке (сначала выделенный текст).

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