ikw*_*yl6 52 vim shell command-line pipe
我想将所选文本传递给shell命令,并在vim info /命令行上从此shell命令接收单行输出?
我真正想做的事情:将所选文本传递给pastebin-type shell命令,我想接收shell cmd的输出(它是pastebin的http链接).这可能吗?
Epe*_*eli 105
对于多行版本,您可以在选择文本后执行以下操作:
:'<,'>:w !command<CR>
Run Code Online (Sandbox Code Playgroud)
您可以将其映射到简单的可视模式快捷方式,如下所示
xnoremap <leader>c <esc>:'<,'>:w !command<CR>
Run Code Online (Sandbox Code Playgroud)
在可视模式下按下领导键+ c,将所选文本发送到命令的标准输入.该命令的stdout将打印在vim的状态栏下方.
CoffeeScript的真实世界示例:
https://github.com/epeli/vimconfig/commit/4047839c4e1c294ec7e15682f68563a0dbf0ee6d
Neg*_*_EV 31
只需使用视线选择shift-v突出显示线条,点击:!并键入要将命令发送到的命令.然后,生成的输出将替换您选择的文本.
当您键入命令时,它将显示在底部:
:'<,'>!somecmd
Run Code Online (Sandbox Code Playgroud)
'<,'>表示您在视觉上选择的范围将传递给在!之后指定的命令.
mat*_*ias 17
我会这样做:
将此函数放在vimrc中:
function Test() range
echo system('echo '.shellescape(join(getline(a:firstline, a:lastline), "\n")).'| pbcopy')
endfunction
Run Code Online (Sandbox Code Playgroud)
这将允许您通过执行以下操作来调用此函数:
:'<,'>call Test()
Run Code Online (Sandbox Code Playgroud)
然后你也可以这样映射(就在vimrc中的函数声明下):
com -range=% -nargs=0 Test :<line1>,<line2>call Test()
Run Code Online (Sandbox Code Playgroud)
所以你可以这样调用函数:
:'<,'>Test
Run Code Online (Sandbox Code Playgroud)
注意: :<','>是范围选择器,为了生成它们只需在可视模式下选择相关的行然后进入命令模式(按冒号键)
也许你应该使用类似的东西
:echo system('echo '.shellescape(@").' | YourCommand')
Run Code Online (Sandbox Code Playgroud)
从一些 vim-7.4 版本开始最好使用
:echo system('YourCommand', getreg('"', 1, 1))
Run Code Online (Sandbox Code Playgroud)
. 如果 NUL 字节存在于文件中,这基本上是保持 NUL 字节不变的唯一方法。@"以一种或另一种方式传递会将 NUL 字节转换为 NL(换行符)。