0

环境:

OS X:10.11.3

NeoVim:0.1.2-dev

设置文件格式=unix

下面的 vim 函数运行一个 zsh 脚本,它返回页面标题、URL、最后修改时间和当前日期和时间。

function! SafariURL()
let saf_data=system(shellescape('/Users/xxx/Documents/zsh scripts/saf_grab.sh'))
let saf_sub=substitute(saf_data, "^M", "\r","g")
call append(17,saf_sub)
end function

saf_grab.sh 脚本包含以下代码:

mytext=$(/usr/bin/osascript << END
tell application "Safari"
set selecTxt to (do JavaScript "(getSelection().toString())" in document 1)
set pgTitl to (do JavaScript "document.title" in document 1)
set pgDate to (do JavaScript "document.lastModified" in document 1)
set myURL to URL of front document
set copyText to selecTxt  &  "[" & pgTitl & "]" & "(" & myURL & ")" & return & "Page Last Modified:" & pgDate & return & "Clipped On:" & (current date)
return copyText 
end
END)

echo $mytext
echo "$mytext" |  bcopy

出于某种原因,sf_grab.sh 返回的字符串^M作为换行符插入,如下所示:

[Newline - Wikipedia, the free encyclopedia]^M(https://en.wikipedia.org/wiki/Newline)^MPage Last Modified:01/16/2016 13:07:02^MClipped On:Tuesday, 2 February 2016 at 11:00:37^@

我试图在 vim 函数中进行替换以替换这些字符,\r但它导致^M被替换为^M.

如果我将替换更改为\n而不是\r,则将^M替换为^@

我不明白为什么原始脚本^M首先返回 's 以及如何根据需要用换行符替换它们。

4

2 回答 2

0

在 vim 中打开你的 vim 函数,然后写 ^M

脚步

  1. 启用插入模式

  2. 按 Control + Shift + v

  3. 按 Control + Shift + m

function! SafariURL()
let saf_data=system(shellescape('/Users/xxx/Documents/zsh scripts/saf_grab.sh'))
let saf_sub=substitute(saf_data, "^M", "\r","g")
call append(17,saf_sub)
%s/^M/\r/g
end function
于 2016-02-03T12:02:01.473 回答
0

请找到以下链接,它可能会有所帮助

[如何用“\r”替换“^@”

或一个简单的解决方案(我知道这不是正确的方法)

首先将 \n 替换为一些永远不会出现的文本,例如 saf_grab.sh 中的“@@newline@@”

并用“\r”恢复“@@newline@@”。

let saf_sub=substitute(saf_data, "@@newline@@", "\r","g")
于 2016-02-02T15:31:32.607 回答