在nvim脚本中替换^ M.

时间:2016-02-02 11:39:19

标签: regex macos vim zsh neovim

环境:

  

OS X:10.11.3

     

NeoVim:0.1.2-dev

     

set fileformat = 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以及如何根据需要用换行符替换它们。

2 个答案:

答案 0 :(得分:0)

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

[How to replace "^@" with "\r"

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

首先用一些不会出现的文字替换\ n,例如&#34; @@ newline @@&#34;在你的saf_grab.sh

并恢复&#34; @@ newline @@&#34;用&#34; \ r&#34;。

/res/layout-sw600dp-land

答案 1 :(得分:0)

在vim中打开你的vim函数,然后用

写^ M

步骤

  1. 启用插入模式

  2. 按Control + Shift + v

  3. 按Control + Shift + m

  4. 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