如何从带有视觉标记文本的vim调用外部程序作为参数?

时间:2010-11-16 09:24:19

标签: vim

通话模式:path-to-programm visual-marked-text filetype directory

示例:"C:\Programme\WinGrep\grep32.exe" search-pattern *.sql D:\MyProject\build

4 个答案:

答案 0 :(得分:5)

选择文本,然后键入:

:!<program>

例如,要对行进行排序,请选择它们并键入:

:!sort

请注意,这将使用外部程序的输出替换标记的文本

答案 1 :(得分:4)

您可以使用 y 抽取所选文本并将其粘贴到命令行中:

:! cmd Ctrl-R [其他参数]

答案 2 :(得分:4)

可以使用以下Vim脚本函数来执行此操作。

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函数运行命令模板,然后运行 执行结果命令回显其输出。

如果更改命令的唯一部分是pattern,则很方便 定义映射,

vnoremap <leader>g :<c-u>call FeedVisualCmd('"C:\Programme\WinGrep\grep32.exe" %s *.sql D:\MyProject\build')<cr>

答案 3 :(得分:0)

要将突出显示的文本作为参数传递,您可以在linux / unix(或Windows上的cygwin)上使用xargs,如下所示:

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

通过以可视模式突出显示文本然后键入来输入此命令 :!并输入其他命令。

命令的

{}部分将被xargs命令的输入替换,该命令是突出显示的文本。因此path-to-program将以正确的顺序执行所需的参数(首先选择文本)。