【问题标题】:Replace vim selection with output of shell command用 shell 命令的输出替换 vim 选择
【发布时间】:2011-10-19 10:19:16
【问题描述】:

我需要将 vim 中的一些选定文本作为参数值传递给 curl 命令。例如。我需要能够运行

curl -sSd css="body { border-radius: 5px; }" http://prefixr.com/api/index.php

来自 vim。显然,“body {border-radius: 5px;}”部分将是动态的。通常,vim 中的可视模式选择。

如何获取选定的文本并将其作为参数传递给 curl?

【问题讨论】:

标签: vim curl pipe external


【解决方案1】:

您可以使用:! 命令通过外部程序过滤选定的文本。 文本被输入到标准输入并用标准输出的结果替换。

在这种情况下,您必须使用 cat 和命令替换来将行作为参数提供给 curl,如下所示:

:'<,'>!curl -sSd css="`cat`" http://prefixr.com/api/index.php

【讨论】:

  • 哈奇。但这正是我想要的。谢谢。
  • 这似乎适用于有选择的行,而不适用于选定的文本。例如,如果一行是“abcde”并且我选择“bcd”并运行例如:'&lt;,'&gt;!python3 -c 'print(input()+"x")',我会得到“abcdex”而不是“abcdxe”。我在某处读到使用`&lt;`&gt; 代替'&lt;'&gt; 应该对选择进行操作,但对我不起作用。
  • 正是这样的事情使 Vim 变得最伟大。谢谢!
【解决方案2】:

通过选择一行或多行并使用 :!您可以将这些行传递给命令,例如:

所以使用sort 命令对整个文件进行排序,试试这个:ggVG !sort,在你的编辑器中应该是这样的:

B

C

一个

:'!排序

【讨论】:

  • 我知道!让您运行 shell 命令,但我想将选择复制到 part shell 命令。不仅仅是管道。
【解决方案3】:

现在无法测试所以不能 100% 确定它是否会工作

esc,然后是

:r ! curl -sSd="`cat`" http://prefixr.com/api/index.php`

【讨论】:

  • 请不要投反对票,直到我明天可以试试这个,嗯? :)
  • 先试一试怎么样?
【解决方案4】:

对于没有免费换行符的管道词,请参阅此示例以大写所选文本:

select-region c Control-r = system("perl -pe '$=uc($)'", @")

说明:选择区域,c是to(改变选择),C-r是执行表达式。 注意:美元是美元下划线,但下划线在发布后不可见。

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    相关资源
    最近更新 更多