如何为包含撇号和引号的命令设置别名?

xi1*_*00f 2 command-line shell alias quoting

由于我之前的问题,我决定

alias groe= ?vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!'?

我无法找到如何在我的示例中替换 '?s' 以使其工作。已经尝试过问号和撇号。任何想法,将不胜感激。谢谢

rud*_*ier 7

“内部”单引号,您可以通过关闭外部单引号来获得单引号,然后添加转义单引号并重新打开外部单引号,例如

echo 'It'\''s ugly.'
Run Code Online (Sandbox Code Playgroud)

换句话说,所有内容都'将变成'\''加上外部单引号。

你的别名看起来像这样:

alias groe='vim -c '\''normal "+p1Gdddd"'\'' -c '\'':%s/\n/'\'' -c '\''normal"gVGgJy"'\'' -c'\''q!'\'''
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 C 样式转义$'...',其中您只需转义单引号一次,但也转义字符\n

echo $'It\'s a newline: \\n'
alias groe=$'vim -c \'normal "+p1Gdddd"\' -c \':%s/\\n/\' -c \'normal"gVGgJy"\' -c\'q!\''
Run Code Online (Sandbox Code Playgroud)


ilk*_*chu 5

使其成为 shell 函数,这样您就可以丢失外部引号。

groe() {
  vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!' "$@"
  }
Run Code Online (Sandbox Code Playgroud)

这应该调用vim参数-c, normal "+p1Gdddd", -c, :%s/\n/, -c, normal"gVGgJy", -cq!。将"$@"在膨胀到你给函数的参数,所以groe foo.txt应该工作。