【发布时间】:2017-06-25 09:35:22
【问题描述】:
这似乎是一个相对基本的问题,但经过一个小时的搜索,我在任何地方都找不到。 许多(有很多!)类似的问题似乎没有抓住重点。
我正在编写script ("vims") 以在类似 sed 的模式下使用 vim(因此我可以在流输入上调用普通 vim 命令而无需实际打开 vim),因此我需要将每个参数传递给vim 前面带有“-c”标志。还有很多字符需要转义(我需要传递正则表达式),所以SO上的一些常用方法不起作用。
基本上,当我写的时候:
cat myfile.txt | vims ':%g/foo/exe "norm yyPImyfile: \<esc>\$dF,"' ':3p'
这是在标准输出上运行的两个命令行 vim 参数,
我需要将这两个单引号参数完全传递给我的函数vims(),然后用-c标志标记它们每个,因此它们被解释为命令vim。
这是我迄今为止尝试过的:
vims() {
vim - -nes -u NONE -c '$1' -c ':q!' | tail -n +2
}
这似乎适用于单个命令。没有字符被转义,并且“-c”标志在那里。
然后,我尝试使用经常重复的问答,"$@" 技巧:
vims() {
vim - -nes -u NONE $(for arg in "$@"; do echo -n " -c $arg "; done) -c ':q!' | tail -n +2
}
这似乎打破了我传递的每个字符串中的空格,所以不起作用。正如其他问题中所建议的那样,我还尝试了printf 命令的一些变体,但这与 vim 命令序列有奇怪的交互。我在永久编辑测试循环中尝试了许多其他不同的反斜杠引号组合,但总是在我的方法中发现一个怪癖。
我缺少什么命令序列?
【问题讨论】: