通话模式:path-to-programm visual-marked-text filetype directory
示例:"C:\Programme\WinGrep\grep32.exe" search-pattern *.sql D:\MyProject\build
答案 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
将以正确的顺序执行所需的参数(首先选择文本)。