Posição do cursor no vi na abertura do arquivo

1
vishex ()
{ 
    echo '#!/bin/bash' > $1;
    chmod +x $1;
    vi $1
}

O objetivo da função acima é ter um alias para a criação rápida e confortável de scripts bash. Eu gostaria que na abertura do arquivo o cursor não estaria na linha Shebang, mas em uma linha abaixo. Eu tentei algo como echo 'blabla\n', echo "blala\n", printf "blala\n" sem nenhum resultado.

    
por Symb932 09.10.2015 / 09:26

2 respostas

3

Use isto:

vishex () 
{ 
    [ -e "$1" ] || echo -e '#!/bin/bash\n\n' > "$1";
    chmod +x "$1";
    vi "+normal G" +startinsert "$1"
}
  • [ -e "$1" ] verifica se o script já existe. Se sim echo não irá substituí-lo.
  • -e in echo permite a interpretação de escapes de barra invertida, como \n para uma nova linha. Em seguida, insere 2 novas linhas após a linha shebang.
  • +normal G executa o comando ex G , que salta para a última linha do arquivo.
  • +startinsert muda diretamente para o modo de inserção (você também pode deixar isso, pois não está na questão mencionada).

Então, ao executar vishex script , ele aparece da seguinte maneira:

#!/bin/bash

<- cursor is here
~
[...]
~
-- INSERT --                                                               3,1           All
    
por 09.10.2015 / 09:41
0

Assumindo que o seu vi é realmente vim , na página de manual:

+[num]   For  the  first file the cursor will be positioned on line "num".
         If "num" is missing, the cursor will be positioned  on  the  last line.

Assim, use:

vi + "$1"
    
por 09.10.2015 / 09:34