Por que o vim retornaria código de saída diferente de zero se eu sair imediatamente após a abertura?

15

Estou com um problema estranho com vim no Snow Leopard: recebo um código de saída diferente de zero simplesmente executando vim e, em seguida, desistindo.

$ vim
# exit immediately using :q
$ echo $?
1

No entanto, se eu usar o caminho completo para vim , não vejo esse comportamento

$ /usr/bin/vim
# exit immediately using :q
$ echo $?
0

No começo, achei que vim estava vindo de algum lugar no início do meu caminho, mas:

$ which vim
/usr/bin/vim

Então estou perdido. O que poderia estar causando isso?

UPDATE: Este problema resolveu-se magicamente, o que me deixa altamente suspeito. Minha melhor teoria atual é que eu tive um problema com meu .vimrc ou um plugin que consertei acidentalmente enquanto ajustava minha configuração de alguma outra forma. Se eu puder rastrear exatamente o que fiz para corrigi-lo, definitivamente atualizarei com essa informação. Obrigado pelas respostas.

    
por Hank Gay 06.06.2011 / 15:39

4 respostas

14

Você tem filetype off em seu vimrc? Tente substituí-lo por:

filetype on
filetype off

Eu tive esse problema usando o Pathogen de Tim Pope no OS X. Este artigo me ajudou a resolver o problema. Se você estiver usando o Pathogen ...

call pathogen#runtime_append_all_bundles()

... faça isso:

filetype on
filetype off
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
filetype plugin indent on

link

    
por 30.06.2011 / 05:00
8

Eu posso pensar em duas explicações possíveis.

  1. vim é na verdade um alias. Observe que which não mostra aliases, você deve usar type (a menos que você esteja executando csh ou tcsh).

  2. O Vim vai procurar por algum arquivo em um caminho relativo ao seu diretório de instalação, o qual ele determina olhando argv[0] (o nome do executável como passado do shell) e, de alguma forma, não consegue achar isso. caminho se é chamado através de um caminho relativo. Isso seria tecnicamente possível, mas eu não acho que o Vim realmente faça isso.

por 06.06.2011 / 23:08
7

I get a non-zero exit code from simply running vim and then quitting.

Isso não acontece aqui, com um sistema semelhante: o Snow Leopard e a versão de ações do Vim.

Experimente este comando:

$ sudo dtruss vim +q

Isso lhe dará uma lista de todos os syscalls que o Vim faz enquanto inicializa e então desliga imediatamente. ( dtruss é equivalente a strace no Linux, se você já usou isso antes.)

O que você está procurando é uma linha perto do final que mostra um código de erro, normalmente -1. Olhando para os argumentos para a chamada do sistema deve levar você para o problema. Uma possibilidade de alta probabilidade é um arquivo ausente, que provavelmente aparecerá em uma chamada open() .

Se o Vim sair corretamente quando executado dessa forma, você provavelmente terá um problema de permissão, que o sudo precisava para permitir que dtruss fosse executado. Nesse caso, você provavelmente pode corrigir isso reparando permissões .

    
por 06.06.2011 / 17:23
2

Eu tinha atingido esse problema de códigos de retorno. Eu o rastreei de volta a um comando loadview em execução silenciosa no meu vimrc que fornece visualizações persistentes:

" Persistent views
if has("mksession")
    set viewdir=$HOME/.vimviews
    if has("unix")
        silent execute '!mkdir -p $HOME/.vimviews'
    endif
    au BufWinLeave * silent! mkview "make vim save view (state) (folds, cursor, etc)
    au BufWinEnter * silent! loadview "make vim load view (state) (folds, cursor, etc)
endif

Ao inserir um buffer sem um nome de arquivo, o silent! loadview será executado, ocultando o erro

E32: No file name

que também fez com que o código de retorno fosse definido para um.

    
por 25.08.2011 / 11:58

Tags