Warum würde vim einen Exit-Code ungleich Null zurückgeben, wenn ich unmittelbar nach dem Öffnen beende?

15

Ich habe ein seltsames Problem mit vimSnow Leopard: Ich bekomme einen Exit-Code ungleich Null, wenn ich einfach renne vimund dann beende.

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

Wenn ich jedoch den vollständigen Pfad zu verwende vim, wird dieses Verhalten nicht angezeigt

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

Zuerst dachte ich, ich käme vimvon irgendwo früher auf meinem Weg, aber:

$ which vim
/usr/bin/vim

Also bin ich ratlos. Was könnte das verursachen?

UPDATE: Dieses Problem hat sich auf magische Weise von selbst gelöst, was mich sehr misstrauisch macht. Meine derzeit beste Theorie ist, dass ich ein Problem mit meinem .vimrcoder einem Plugin hatte, das ich versehentlich behoben habe, als ich mein Setup auf eine andere Weise geändert habe. Wenn ich genau feststellen kann, was ich getan habe, um es zu beheben, werde ich auf jeden Fall mit diesen Informationen aktualisieren. Danke für die Antworten.

Hank Gay
quelle
Ich habe es in einem Makefile durch Hinzufügen behoben -u NONE, wodurch vim angewiesen wird, überhaupt keine Konfigurationsdatei zu laden. Könnte in einigen Situationen helfen.
Boldewyn

Antworten:

14

Hast du filetype offin deinem vimrc? Versuchen Sie, es durch Folgendes zu ersetzen:

filetype on
filetype off

Ich hatte dieses Problem mit Tim Popes Pathogen unter OS X. Dieser Artikel hat mir geholfen, das Problem zu lösen. Wenn Sie Pathogen verwenden ...

call pathogen#runtime_append_all_bundles()

... mach das stattdessen:

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

http://andrewho.co.uk/weblog/vim-pathogen-with-mutt-and-git

Brandon Bloom
quelle
Das ist ein guter Punkt. Ich hatte dieses spezielle Problem bereits behoben , aber es führte mich zu dem Verdacht, dass ich versehentlich einen Fehler an einer anderen Stelle in meinem Computer behoben habe .vimrc.
Hank Gay
Dies hat ein identisches Problem für mich behoben, außer bei Vundle und nicht bei Pathogen.
Jonah Braun
Nur um eine weitere +1 hinzuzufügen, ist dies ein altes Update, aber es hat nur funktioniert, um dieses Problem mit Vundle auf einem OSX-System zu beheben. Einfach filetype onüber das Bestehende geworfen filetype off.
Mikey TK
8

Ich kann mir zwei mögliche Erklärungen vorstellen.

  1. vimist eigentlich ein Alias. Beachten Sie, dass whichkeine Aliase angezeigt werden. Verwenden Sie typestattdessen (es sei denn, Sie führen csh oder tcsh aus).

  2. Vim sucht nach einer Datei in einem Pfad relativ zu seinem Installationsverzeichnis, das es anhand seiner Suche ermittelt argv[0](der Name der ausführbaren Datei, wie er von der Shell übergeben wird), und findet diesen Pfad irgendwie nicht, wenn er über einen relativen Pfad aufgerufen wird. Das wäre technisch möglich, aber ich glaube nicht, dass Vim das tatsächlich tut.

Gilles 'SO - hör auf böse zu sein'
quelle
7

Ich erhalte einen Exit-Code ungleich Null, wenn ich einfach vim starte und dann beende.

Bei einem ähnlichen System ist das hier nicht der Fall: Snow Leopard und die Standardversion von Vim.

Versuchen Sie diesen Befehl:

$ sudo dtruss vim +q

Dadurch erhalten Sie eine Liste aller Systemaufrufe, die Vim während der Initialisierung und beim sofortigen Herunterfahren durchführt. ( dtrussEntspricht straceLinux, wenn Sie das schon einmal verwendet haben.)

Was Sie suchen, ist eine Zeile in der Nähe des Endes, die einen Fehlercode anzeigt, normalerweise -1. Ein Blick auf die Argumente zum Systemaufruf sollte Sie zum Problem führen. Eine Möglichkeit mit hoher Wahrscheinlichkeit ist eine fehlende Datei, die wahrscheinlich bei einem open()Anruf angezeigt wird.

Wenn Vim sauber beendet , wenn auf diese Weise läuft, haben Sie wahrscheinlich ein Problem mit den Berechtigungen, die die sudobenötigten , damit dtrussherumzulaufen erhält. In diesem Fall können Sie das Problem wahrscheinlich beheben, indem Sie die Berechtigungen reparieren .

Warren Young
quelle
Entschuldigung - ich bin jetzt auf meiner Arbeitsmaschine und es hat dieses Verhalten nicht. Ich werde es auf jeden Fall überprüfen, wenn ich wieder auf meinem Heimcomputer bin.
Hank Gay
Wenn Sie es nicht herausfinden können, hängen Sie die dtrussAusgabe an Ihre Frage an. (Oder zumindest die letzten 25 Zeilen oder so.) Was für Sie unverständlich ist, kann einen anderen zur richtigen Antwort führen.
Warren Young
@nlucaroni: Freut mich zu hören. Für die Nachwelt aber das reparierte es von den beiden Ideen in meiner Antwort? Hatten Sie ein Berechtigungsproblem, das sudo"behoben" wurde, und das Sie darüber informierte, dass Sie Reparaturberechtigungen ausführen mussten? Oder war es eher so, dass dtrussIhnen ein Syscall-Fehler angezeigt wurde, und wenn ja, welcher und warum ist er fehlgeschlagen?
Warren Young
Syscall-Fehler beim Öffnen von Dateien, die nicht vorhanden waren. Mein Kollege hatte gerade jemand anderes als das zipp- .vimVerzeichnis und genommen .vimrc, und die Dinge hatten vollständige Pfade und fehlende Dateien von nicht verwendeten Plugins.
Nlucaroni
2

Ich hatte dieses Problem mit den Rückkehrcodes. Ich habe es auf einen loadviewunbeaufsichtigt ausgeführten Befehl in meinem vimrc zurückgeführt, der beständige Ansichten bietet:

" 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

Wenn Sie einen Puffer ohne Dateinamen eingeben, wird der silent! loadviewausgeführt und der Fehler ausgeblendet

E32: Kein Dateiname

was auch dazu geführt hatte, dass der Rückkehrcode auf eins gesetzt wurde.

David Thomas
quelle