Algo que deveria parecer simples

0

Como mencionado no título, isso deve ser algo simples, mas, para minha vida, não consigo fazer com que funcione direito.

Estou escrevendo um pequeno script executável que cuidará de inserir o local do interpretador sempre tão necessário para a primeira linha de um script e abrir o novo script para edição. Tudo bem, legal ... feito: printf "#!%s" $(which bash) > $1; vim $1 . Bastante simples.

Onde o problema, percebido apenas como um problema porque estou curioso para saber como fazer isso e não estou conseguindo, é ter o script automaticamente iniciado na linha 2 no modo de inserção. Desta forma, eu estou em uma linha vazia, pronto para ir ... sem perder os 0,5 segundos ou mais para pressionar 'o' (estou usando o vim como meu editor de texto para referência).

Então, eu acho que a minha pergunta é como faço para que meu script automatizado simule pressionando 'o' quando o script recém-criado é aberto com a saída '#! $(which bash) ' na primeira linha?

Coisas tentadas:

  • Usando o caractere de nova linha que escapou com printf: printf "#!%s\n" $(which bash) > $1
  • Usando o eco com o sinalizador de caractere de nova linha: echo -e "#!$(which bash)\n" > $1
por Kevin Wyman 24.07.2013 / 17:10

2 respostas

2

Isso deve fazer o que você quer:

printf '#!%s\n\n' $(which bash) > "$1" ; vim -c startinsert +2 "$1"

Ele insere duas novas linhas no arquivo, portanto não é necessário o . Em seguida, inicia o vim na segunda linha (+2) no modo de inserção.

Além disso, prefira aspas simples para aspas duplas, se nenhuma expansão for necessária. Nesse caso, ! pode ser interpretado como o caractere especial de expansão de histórico entre aspas duplas e alterar totalmente o que é impresso.

    
por choroba 24.07.2013 / 17:22
2

As coisas que você tentou não vão ajudar, já que isso não depende do conteúdo do arquivo; em vez disso, depende do editor de texto.

No Vim, o seguinte deve funcionar:

vim "$file" +'$normal o' +'startinsert'

Cada argumento + é interpretado no "modo de comando"; geralmente é o número da linha, mas qualquer comando realmente funciona. :$normal o acrescenta uma linha vazia após a última linha (é feia, mas não consegui pensar em outra forma); :startinsert entra no modo de inserção.

    
por grawity 24.07.2013 / 17:18