如何为包含撇号和引号的命令添加别名?

如何为包含撇号和引号的命令添加别名?

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

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

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

答案1

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

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

那应该vim用参数-c, normal "+p1Gdddd", -c, :%s/\n/, -c, normal"gVGgJy",来调用-cq!。 at"$@"扩展为您赋予函数的参数,因此groe foo.txt应该可以工作。

答案2

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

echo 'It'\''s ugly.'

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

你的别名看起来像这样:

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

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

echo $'It\'s a newline: \\n'
alias groe=$'vim -c \'normal "+p1Gdddd"\' -c \':%s/\\n/\' -c \'normal"gVGgJy"\' -c\'q!\''

答案3

在 MacOS 上,我发现将以下行放在 my 中.bash_profile给了我一个别名,该别名仅在以后使用该logr命令时设置有用的别名:

alias logr="alias r='java -jar LogUtil.jar -gui'"

我在为所有新 shell 创建的""整个别名周围使用了双引号,但只有在发出命令后,该别名才可用。logrrlogr

相关内容