Intereting Posts

Почему vim возвращает ненулевой код выхода, если я выйду сразу после открытия?

Я сталкиваюсь с какой-то странной проблемой w / vim на Snow Leopard: я получаю ненулевой код выхода из простого запуска vim и затем уходит.

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

Однако, если я использую полный путь к vim , я не вижу этого поведения

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

Сначала я думал, что vim идет откуда-то раньше на моем пути, но:

 $ which vim /usr/bin/vim 

Поэтому я в недоумении. Что может быть причиной этого?

ОБНОВЛЕНИЕ: эта проблема волшебно разрешилась, что делает меня очень подозрительным. Моя нынешняя лучшая теория заключается в том, что у меня была проблема с моим .vimrc или плагином, который я исправил случайно, когда настраивал свою настройку каким-то другим способом. Если я смогу отслеживать, что я сделал, чтобы исправить это, я обязательно обновлю эту информацию. Спасибо за ответы.

У вас есть filetype off в вашем vimrc? Попробуйте заменить его:

 filetype on filetype off 

У меня была эта проблема с использованием Pathogen от Tim Pope в OS X. Эта статья помогла мне решить эту проблему. Если вы используете Pathogen …

 call pathogen#runtime_append_all_bundles() 

… сделайте это вместо этого:

 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

Я могу представить два возможных объяснения.

  1. vim на самом деле является псевдонимом. Обратите внимание на то, which не отображает псевдонимы, вы должны использовать type вместо этого (если вы не используете csh или tcsh).

  2. Vim отправляется искать некоторый файл по пути относительно его каталога установки, который он определяет, глядя на argv[0] (имя исполняемого файла, переданного из оболочки), и каким-то образом не удается найти этот путь, если он вызван относительный путь. Это было бы технически возможно, но я не думаю, что Вим на самом деле это делает.

Я получаю ненулевой код выхода из простого запуска vim и затем уходит.

Этого не происходит здесь, с подобной системой: Snow Leopard и версией Vim.

Попробуйте эту команду:

 $ sudo dtruss vim +q 

Это даст вам список всех системных вызовов, которые Vim делает, когда он инициализируется, а затем немедленно отключается. ( dtruss эквивалентен strace на Linux, если вы использовали это раньше.)

То, что вы ищете, – это строка, близкая к концу, которая показывает код ошибки, обычно -1. Рассмотрение аргументов системного вызова должно привести вас к проблеме. Одна из возможностей с высоким правдоподобием – это отсутствующий файл, который, вероятно, будет отображаться при вызове open() .

Если Vim выходит из строя, когда вы запускаете этот путь, у вас, вероятно, есть проблема с разрешением, которое sudo необходимо для dtruss . В этом случае вы, вероятно, можете исправить это, отредактировав разрешения .

Я ударил эту проблему с кодами возврата. Я проследил его до молчаливо исполняемой команды loadview в моем vimrc, которая обеспечивает постоянные представления:

 " 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 

При вводе буфера без имени файла, silent! loadview silent! loadview будет выполняться, скрывая ошибку

E32: имя файла отсутствует

что также привело к тому, что код возврата был установлен на один.