2017-01-18 14 views
2

Это странный код возврата, даже у меня есть псевдоним vi по vim.Vi с псевдонимом vim, но выход с кодом 1

Я очень признателен, если кто-нибудь может объяснить мне, почему.

Ознакомьтесь с нижеприведенными командами и результатами.

  • which vi возвращает /usr/bin/vi
  • which vim возвращает /usr/bin/vim
  • ls -al /usr/bin/vi /usr/bin/vim возвращает

    lrwxr-xr-x 1 root wheel  3 Dec 15 03:34 /usr/bin/vi -> vim 
    -rwxr-xr-x 1 root wheel 1745984 Dec 10 18:03 /usr/bin/vim 
    
  • cat ~/.vimrc возвращает

    set nocompatible 
    silent! unmap <C-E> 
    
  • vim затем :q, чтобы немедленно уйти. Затем возвращает 0

  • vi затем :q совершенно сразу. Но проблема заключается в том здесь, echo $? возвращается 1
  • И если вторая линия в .vimrc, т.е. silent! unmap <C-E>, удаляется, vi, :q, echo $? возвращает 0
  • vi затем :version печатает

    VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Oct 5 2016 16:04:34) 
    Included patches: 1-898 Compiled by [email protected] Normal version 
    without GUI. Features included (+) or not (-): 
    +acl    +cindent   -conceal   +digraphs  -farsi   -gettext   +libcall   +mksession  -mouse_netterm -mzscheme  -profile   +scrollbind  +syntax   +textobjects  +visualextra  -X11 
    -arabic   -clientserver +cryptv   -dnd    +file_in_path -hangul_input +linebreak  +modify_fname -mouse_sgr  +netbeans_intg +python/dyn  +signs   +tag_binary  +title   +viminfo   -xfontset 
    +autocmd   -clipboard  +cscope   -ebcdic   +find_in_path +iconv   +lispindent  +mouse   -mouse_sysmouse +path_extra  -python3   +smartindent  +tag_old_static -toolbar   +vreplace  -xim 
    -balloon_eval +cmdline_compl +cursorbind  -emacs_tags  +float   +insert_expand +listcmds  -mouseshape  -mouse_urxvt  -perl   +quickfix  -sniff   -tag_any_white +user_commands +wildignore  -xsmp 
    -browse   +cmdline_hist +cursorshape  +eval   +folding   +jumplist  +localmap  -mouse_dec  +mouse_xterm  +persistent_undo +reltime   +startuptime  -tcl    +vertsplit  +wildmenu  -xterm_clipboard 
    +builtin_terms +cmdline_info +dialog_con  +ex_extra  -footer   -keymap   -lua    -mouse_gpm  +multi_byte  +postscript  -rightleft  +statusline  +terminfo  +virtualedit  +windows   -xterm_save 
    +byte_offset  +comments  +diff   +extra_search +fork()   -langmap   +menu   -mouse_jsbterm +multi_lang  +printer   +ruby/dyn  -sun_workshop +termresponse +visual   +writebackup  -xpm system vimrc file: "$VIM/vimrc" 
        user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" 
         user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H  
    -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -o vim  -lm -lncurses -liconv 
    
  • Я пробовал iTerm, Terminal, chan ged shell до bash, zsh, fish. Удалить первую строчку, set nocompatible, в .vimrc. Но все они вернули этот результат.

Если вам требуется дополнительная конфигурация на моем ПК, просьба дать комментарий, я предоставлю его.

Заранее благодарен.


Update

Потому что я открыл новую оболочку на основе текущей оболочки, с помощью команды, как zsh, bash. Он проигнорировал мой .zshrc/.bash_profile.

Таким образом, $PATH не включает /usr/local/bin. Затем вместо использования доморощенного .0 версии. which vim указал на версию MacOS /usr/bin/vim по умолчанию.

После попытки открыть открытую новую оболочку на command-T и убедитесь, что which vim возвращает /usr/local/bin/vim, то есть версию доморощенного. vi, :q, echo $? Эхо ожидается ожидаемый результат 0.

Это решило мою проблему с кодом выхода 1 после выхода из vi, это повлияло на команду git commit ..etc. Но я до сих пор не понимаю, почему по умолчанию MacOS версия vi делает неожиданное поведение

+0

Скопируйте пасту с кодом ошибки – Inian

+0

ошибок. Оболочка была чистой после выхода «vi». Я вручную проверю код выхода последней команды на 'echo $?' И получил результат – transang

+0

См. Http://unix.stackexchange.com/questions/14497/why-would-vim-return-non-zero-exit-code-if -i-exit-немедленно-после открытия – chepner

ответ

0

Вам не нужно устанавливать на «nocompatible» в Vim, потому что это по умолчанию.

Я удаляю эту функцию в своем MacOS и отлично работает и имеет статус выхода 0, записывая или не записывая файлы.

Примечание: в MacOS 'VI' является ссылка на 'Vim' (и 'AWK' на самом деле 'простак')

Вывод: вы можете использовать

silent! unmap <C-E> 

в вашем .vimrc Файл и vim могут не выходить с ошибкой.