No OSX, o vi parece retornar 1 inesperadamente apesar de nenhum erro

1

Assim, no estoque Mac OSX Yosemite, se eu executar vi /tmp/foo e, em seguida, digitar algum texto e, finalmente, fazer :Wq (um erro comum que eu faço) e, em seguida, :wq . Tudo parece estar bem, mas por alguma razão o código de saída será 1. Se eu repetir a mesma coisa, mas não faça :Wq então ele retorna 0.

Isso é enlouquecedor para git commit onde eu vou digitar uma mensagem de commit, cometer esse erro e de repente perder minha mensagem de commit porque git coisas que vi não escreveram o arquivo

Como posso corrigir esse comportamento para não acontecer mais e sempre retornar 0, a menos que haja um erro real ao gravar o arquivo?

    
por Earlz 07.08.2015 / 17:30

1 resposta

1

Isso é feito intencionalmente no vim:

  • as chamadas de comando ":wq" , ex_exit ,
  • que chama getout com um código de saída nominal 0 ,
  • em getout , ele verifica se há um erro na modo, comentando
    /* When running in Ex mode an error causes us to exit with a non-zero exit
     * code.  POSIX requires this, although it's not 100% clear from the
     * standard. */
    if (exmode_active)
        exitval += ex_exitval;
  • a variável ex_exitval é definida pela mensagem de erro em emsg :
    called_emsg = TRUE;
    if (emsg_silent == 0)
        ex_exitval = 1;
  • e ex_exitval são nunca limpos.

Portanto, "qualquer" mensagem de erro no modo ex (os comandos : ) produzirá este resultado. Uma verificação rápida mostra que o vi-mode ZZ também é afetado por mensagens de erro ex-mode.

    
por 02.07.2016 / 14:41

Tags