在我的vim中,我可以使用:%!sed "s/^/ /"
,在使用:%!sed 's/^/ /'
时输出错误。
sed: -e expression #1, char 0: no previous regular expression
vim命令模式下单引号和双引号之间是否存在差异? 在我的sed中,单引号与双引号相同。
$ echo "wha012" | sed 's/w/haha/'
hahaha012
$ echo "wha012" | sed "s/w/haha/"
hahaha012
我的系统是Windows的xp + vim 7.3。
在我的系统中:
[1]“c://cygwin/bin/ash.exe”
[2]“c://cygwin/bin/bash.exe”
[3]“c://cygwin/bin/dash.exe”
[4]“c://cygwin/bin/sh.exe”
如果我在set shell=\"c:\cygwin\bin\sh.exe"\ -f
中设置_vimrc
,我会收到新的错误消息:
无法找到sed命令。
答案 0 :(得分:3)
很有趣,当我尝试:%!sed "/^/ /"
时,我收到与使用单引号时相同的错误消息:
sed: 1: "/^/ /": invalid command code /
(这一行替换了我文件的内容。)我希望在那里收到一条错误信息,因为正如@Birei指出的那样,你省略了sed s 命令。这可以按预期工作,使用单引号或双引号:
:%!sed "s/^/ /"
@Birei也是对的,你可以使用vim做这样的事情,但我认为你已经简化了你真正想做的事情。
为了回答原始问题,Vim对文字字符串使用单引号。文字字符串中唯一的特殊字符是'本身。用双引号分隔的字符串使用 \ 来表示特殊字符,例如`“\< Esc>”。
:echo 'a''b' == "a'b"
:help expr-string
:help literal-string
答案 1 :(得分:2)
我的系统是xp + vim 7.3 for windows
默认情况下,Vim使用cmd.exe
在Windows上运行:!
命令,对于来自POSIX shell的引用,您的s/w/haha/
示例建议您进行测试时,其行为会有所不同。尝试像
:set shell=\"C:\path\to\sh.exe\"\ -f
告诉它使用你的POSIX shell。或者,如果您正在使用cygwin,请尝试使用vim
的cygwin版本而不是Windows本机版本。
答案 2 :(得分:0)