Чому vim повертає ненульовий код виходу, якщо я виходжу відразу після відкриття?


15

Я зіткнувся з дещо дивною проблемою в / 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плагіном чи плагіном, які я виправив випадково, під час налаштування налаштувань якимось іншим способом. Якщо я зможу відстежити, що саме я зробив, щоб виправити це, я обов'язково оновлю цю інформацію. Дякую за відповіді.


Я зафіксував це у Makefile, додавши -u NONE, що вказує vim взагалі не завантажувати конфігураційний файл. Може допомогти в деяких ситуаціях.
Boldewyn

Відповіді:


14

Чи є filetype offу вас vimrc? Спробуйте замінити його на:

filetype on
filetype off

У мене виникла ця проблема з використанням патогена Тіма Попа в ОС X. Ця стаття допомогла мені вирішити проблему. Якщо ви використовуєте патоген ...

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


Це хороший момент. Я вже виправив цю конкретну проблему, але саме це змусило мене підозрювати, що я випадково виправив помилку десь в іншому місці .vimrc.
Хенк Гей

Це вирішило ідентичну проблему для мене, окрім Вундла, а не Патогена.
Jonah Braun

Так само, як додати ще один +1, це старе виправлення, але мені просто вдалося виправити цю проблему за допомогою Vundle в системі OSX. Просто кинув filetype onвище існуючого filetype off.
Mikey TK

8

Я можу придумати два можливі пояснення.

  1. vimнасправді псевдонім. Зверніть увагу, що whichпсевдоніми не відображаються, ви повинні використовувати typeзамість них (якщо ви не використовуєте csh або tcsh).

  2. Vim відправляється шукати якийсь файл у шляху відносно його інсталяційного каталогу, який він визначає, переглядаючи argv[0](ім'я виконуваного файлу, як передано з оболонки), і якось не вдається знайти цей шлях, якщо він викликається через відносний шлях. Це технічно можливо, але я не думаю, що Вім насправді це робить.


7

Я отримую ненульовий код виходу з просто запуску vim, а потім виходу з системи.

Тут не трапляється подібної системи: Snow Leopard та біржова версія Vim.

Спробуйте цю команду:

$ sudo dtruss vim +q

Це дозволить отримати список усіх системних викликів, які робить Vim, поки він ініціалізується, а потім негайно вимикається. ( dtrussеквівалентно straceLinux, якщо ви використовували це раніше.)

Що ви шукаєте, це рядок, близький до кінця, який показує код помилки, як правило, -1. Дивлячись на аргументи до системного виклику, слід привести вас до проблеми. Однією з високих можливостей є відсутність файлу, який, ймовірно, з’явиться під час open()виклику.

Якщо Vim виходить з чистого режиму під час запуску таким чином, у вас, ймовірно, є проблема з дозволом, яка sudoпотрібна для того, dtrussщоб запустити, це усувається. У цьому випадку ви, ймовірно, можете це виправити, відремонтувавши дозволи .


Вибачте - я зараз на своїй робочій машині, і вона не має такої поведінки. Я обов'язково перевіряю це, як тільки я знову буду на своїй домашній машині.
Хенк Гей

Якщо ви не можете зрозуміти, додайте dtrussвисновок до свого питання. (Або принаймні, останні 25 рядків і т. Д.) Те, що вам незрозуміло, може привести іншого до правильної відповіді.
Warren Young

@nlucaroni: Радий почути це. Щодо нащадків, яка з двох ідей у ​​моїй відповіді це зафіксувала? Тобто, чи була у вас проблема з дозволом, яка sudo"виправлена", даючи вам знати, що вам потрібно запустити дозволи на відновлення? Або, скоріше, це dtrussпоказало вам помилку систематичного виклику, і якщо так, то яка і чому вона не вдалася?
Warren Young

помилки системного виклику при відкритті файлів, яких там не було. Мій колега щойно взяв .vimдовідник когось із zipp'd та .vimrc, а у речей були повні шляхи та відсутні файли з невикористаних плагінів.
nlucaroni

2

Я потрапив у цю проблему повернення кодів. Я простежив його назад до тихо виконуючої 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виконується, приховуючи помилку

E32: Немає імені файлу

що також призвело до встановлення коду повернення на один.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.