在Vim上运行bash命令并将结果复制到剪贴板

时间:2011-08-14 22:10:49

标签: vim copy clipboard markdown

如何创建Vim命令并将其结果复制到剪贴板?

我想将Markdown转换为HTML并将结果复制到剪贴板。到目前为止,我得到了:

nmap md :%!/bin/markdown/Markdown.pl --html4tags

但是这会将我在Vim上打开的文件替换为Markdown的结果。

3 个答案:

答案 0 :(得分:4)

您没有说明您正在使用哪个系统,但通常将其保存在+中 注册应该工作。您可以致电system()

:let @+=system("markdown --html4tags", join(getline(1,line("$")), "\n"))

system()函数将第二个参数(可选)作为输入 命令,这里我正在使用一系列其他函数来检索内容 当前的缓冲区。不确定,但应该有更好的方法(如果 有人知道,请告诉我。)

或者,您可以直接将markdown文件名作为输入传递:

:let @+=system("markdown --html4tags " . shellescape(expand("%:p")))

但请记住,在调用此文件之前,您需要编写该文件。

两个重要的注释:

  1. 我没有输入降价的完整路径。使用它。
  2. 我这里没有使用地图,最终结果如下:
  3. nnoremap md :let @+=system(...)

答案 1 :(得分:1)

获取xsel包

和管道标准输出到xsel --clipboard

例如:

cat /etc/passwd | xsel --clipboard

这就是你要找的东西吗?

答案 2 :(得分:0)

填写缺失的部分(迟到2年)。随着用户在Mac上的澄清以及提问者的“为什么它对我不起作用?”问题没有得到解答。

要将命令的输出从MacVim(GUI版本)重定向到系统剪贴板,您需要将'*'设置为需要更改剪贴板设置的“剪贴板寄存器” '未命名':

set clipboard 'unnamed'   # 'cb' can be substituted for 'clipboard'

然后sidyll的答案应该有效,除了指定'*'寄存器而不是'+'寄存器:

:let @*=system(...)

剪贴板功能可能无法编译到MacVim的“终端版本”中,当可用时,选项设置与“未命名”不同。要查看有关何处以及如何工作的更多详细信息,请参阅MacVim中使用Vim帮助命令的文档:

 :help 'clipboard'    (include the single quotes since it's a set option!)

(我将跳过命令映射问题,因为它总是需要我多次尝试,我仍然需要查找它;找到映射命令的帮助应该比找到*寄存器更容易。)