¿Cómo asignar un alias a un comando que contiene apóstrofes y comillas?

¿Cómo asignar un alias a un comando que contiene apóstrofes y comillas?

Como resultado de mi pregunta anterior decidí

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

No puedo encontrar cómo sustituir '?s' en mi ejemplo para que funcione. Ya probé signos de interrogación y apóstrofes. Cualquier idea sería apreciada. Gracias

Respuesta1

Conviértalo en una función de shell, para que pueda perder las comillas externas.

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

Eso debería llamar vimcon los argumentos -c, normal "+p1Gdddd", -c, :%s/\n/, -c, normal"gVGgJy", -cq!. El "$@"at se expande a los parámetros que le diste a la función, por lo que groe foo.txtdebería funcionar.

Respuesta2

"Dentro" de las comillas simples, puede tener una comilla simple cerrando la comilla simple externa, luego agregue una comilla simple escapada y vuelva a abrir las comillas simples externas, como

echo 'It'\''s ugly.'

En otras palabras, todo 'se convertirá en '\''comillas simples externas adicionales.

Tu alias se vería así:

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

O puede usar escapes estilo C $'...'donde debe escapar de comillas simples solo una vez pero también escapar de caracteres en \n:

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

Respuesta3

En MacOS descubrí que colocar la siguiente línea en my .bash_profileme dio un alias que solo configura mi alias útil tras el uso posterior del logrcomando:

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

Utilicé comillas dobles ""alrededor de todo el logralias que se crea para todos los shells nuevos, pero el ralias solo está disponible una vez que emito el logrcomando.

información relacionada