在 nvim 脚本中替换 ^M

Substituting ^M in nvim script

环境:

OS X: 10.11.3

NeoVim: 0.1.2-dev

set fileformat=unix

以下 vim 函数运行一个 zsh 脚本,其中 returns 页面标题、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 将替换为 ^@

我不明白为什么原始脚本 returns ^M 排在第一位,以及如何根据需要用换行符替换它们。

请查找以下内容link,它可能会有所帮助

[

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

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

中的“@@newline@@”

并用“\r”还原“@@newline@@”。

let saf_sub=substitute(saf_data, "@@newline@@", "\r","g")

在 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