Como aliasar um comando contendo apóstrofos e aspas?

1

Como resultado da minha pergunta anterior, decidi

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

Não consigo descobrir como substituir '? s' no meu exemplo para que funcione. Já tentei pontos de interrogação e apóstrofos. Qualquer idéia seria apreciada. Thx

    
por xi100f 25.10.2016 / 10:50

2 respostas

3

Crie uma função de shell, para que você possa perder as aspas externas.

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

Isso deve chamar vim com os argumentos -c , normal "+p1Gdddd" , -c , :%s/\n/ , -c , normal"gVGgJy" , -cq! . O "$@" no expande para os parâmetros que você deu à função, então groe foo.txt deve funcionar.

    
por 25.10.2016 / 13:12
3

Aspas simples "Por dentro", você pode ter uma única citação fechando a aspa simples externa e, em seguida, adicionar uma aspas simples com escape e reabrir as aspas simples externas, como

echo 'It look'\''s ugly.'

Em outras palavras, todo ' se tornará '\'' mais aspas simples externas.

Seu alias ficaria assim:

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

Ou você pode usar escapes em estilo C $'...' , em que você precisa escapar aspas simples apenas uma vez, mas também o caractere de escape em \n :

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