如何将脚本中的 HTML 作为富文本发送到剪贴板?我的最终目标是创建一个脚本,以便我可以将源文件中的内容粘贴到电子邮件中,但我希望有一个通用答案可以将其粘贴到任何接受富文本的程序中。
粘贴到电子邮件中的用法示例:
- 在 vim 中打开源文件
- 使用
:TOhtml
命令创建带有 vim 语法高亮的 html 文件 - 使用此处的答案将 html 复制为富文本
- 粘贴到电子邮件中(此电子邮件无需脚本)
答案1
Linux
通过这个答案
cat text.html | xclip -t text/html
苹果
通过这个答案
cat text.html | textutil -stdin -format html -convert rtf -stdout | pbcopy
视窗
在旧版 Windows 中,你只能复制纯文本(通过这个答案)。
type text.html | clip
在 PowerShell 中你可以复制富文本:
type text.html | Set-Clipboard -AsHtml
如果您创建 C:\sandbox\pbcopy.ps1:
type $args[0] | Set-Clipboard -AsHtml
然后你可以启用脚本然后从任何地方运行它(cmd.exe,.bat 文件等):
powershell C:\sandbox\pbcopy.ps1 text.html
有一些不同的 Cygwin 命令复制到 Windows 剪贴板,然后好像cygwin 提供了 xclip,因此如果您有 cygwin,您可能可以在 Windows 上使用 Linux 解决方案。
答案2
还有 Pandoc 解决方案
根据此处的答案进行开发
方案 1
使用
:TOhtml
,这将为你提供一个包含转换后的 html 的新缓冲区。接下来,使用:w ! xclip -t text/html -selection clipboard
当我将其粘贴到 libreoffice 中时,它有行号。我尝试禁用它们,然后重复。这很有效。
使用 Pandoc 的解决方案:
我更喜欢这个,格式更好,而且是一行代码
:w ! pandoc -s -t html | xclip -t text/html -selection clipboard
一些解释:
:w ! {cmd}
将缓冲区通过管道传输到 shell 命令中的 {cmd}pandoc -s -t html
将获取输入并转换为 html。我认为你可以省略“-t html”- “|” 用作管道,因为它被解释为 shell 命令
xclip -t text/html -selection clipboard
链接中给出了答案吗Linux 答案
编辑:尝试将命令分配给键绑定不起作用。似乎管道正在以通常的 vim 方式使用。
我的解决方法是定义一个函数:
function Html()
let mytext = execute('w ! pandoc -s -t html | xclip -t text/html -selection clipboard')
return mytext
endfunction
然后分配一个键绑定来调用此函数:
nnoremap <leader>h :call Html()<cr>
希望这能有所帮助。如果有人有更简单的解决方案,请评论!
答案3
Mac,适用于 Google Docs
对于在 Mac 上的 Chrome 中运行的 Google Docs/Sheets,您可以使用此片段:
#!/usr/bin/env swift
// Based on https://github.com/chbrown/macos-pasteboard/issues/8#issuecomment-906537204
import Cocoa
import Foundation
let pasteboard: NSPasteboard = .general
let dataTypeName : String = "public.html"
let dataType = NSPasteboard.PasteboardType(rawValue: dataTypeName)
var text : String = ""
while let line = readLine() {
text += line
text += "\n"
}
let data = text.data(using: .utf8)!
pasteboard.clearContents()
pasteboard.setData(data, forType: dataType)
exit(0)
echo '<b>qwerty</b>' | ./pbcopy_html.swift
请注意,它会粘贴仅有的在 Google Docs 中,在其他地方粘贴会失败。
要从剪贴板中提取 html 内容,pbpaste
可以使用 plain:
pbpaste -Prefer public.html
答案4
使用电子邮件CSS!使用UTF8编码html文件!
从命令行运行 http( HTML-eMail.html
) 电子邮件:
powershell .\mail-http.ps1
邮件-http.ps1:
$time = get-date
$from = '[email protected]'
$to = '[email protected]'
$subject = 'eMail-HTML ' + $time
$server=smtp.gmail.com;$port=587
$encoding = [System.Text.Encoding]::UTF8
$email=new-object Net.Mail.MailMessage($from, $to, $subject, $body)
$email.DeliveryNotificationOptions=[System.Net.Mail.DeliveryNotificationOptions]::Delay
$email.IsBodyHtml = $true
$email.Priority = [System.Net.Mail.MailPriority]::High
$email.BodyEncoding=$encoding
$email.Body = gc '.\HTML-eMail.html' -encoding UTF8
$smtp=new-object Net.Mail.SmtpClient($server,$port)
$smtp.EnableSSL = $true
$smtp.Timeout = 30000 #ms
$smtp.Credentials=New-Object System.Net.NetworkCredential($from, 'derParol');
$smtp.Send($email)
HTML-电子邮件.html:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
...
</html>