2015-07-07 2 views
3

Насколько я знаю, мы могли бы определить функцию в .vimrc, как показано ниже:Почему моя функция в .vimrc вызвана автоматически?

function Fun() 
    do something here 
endfunction 

Тогда мы могли бы назвать это как :call Fun().

Для одной из моих систем есть только определение функции в моем .vimrc, однако функция всегда вызывается, как только я попаду в vim. Зачем?

Ниже версия моей Vim:

# vi --version 
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Feb 17 2012 10:24:10) 
Included patches: 1-411 
Modified by <[email protected]> 
Compiled by <[email protected]> 
Small version without GUI. Features included (+) or not (-): 
-arabic -autocmd -balloon_eval -browse +builtin_terms -byte_offset -cindent 
-clientserver -clipboard -cmdline_compl +cmdline_hist -cmdline_info -comments 
-cryptv -cscope -cursorshape -dialog -diff -digraphs -dnd -ebcdic -emacs_tags 
-eval -ex_extra -extra_search -farsi -file_in_path -find_in_path -float 
-folding -footer +fork() -gettext -hangul_input +iconv -insert_expand +jumplist 
-keymap -langmap -libcall -linebreak -lispindent -listcmds -localmap -menu 
-mksession -modify_fname -mouse -mouse_dec -mouse_gpm -mouse_jsbterm 
-mouse_netterm -mouse_sysmouse -mouse_xterm +multi_byte -multi_lang -mzscheme 
-netbeans_intg -osfiletype -path_extra -perl -printer -profile -python 
-quickfix -reltime -rightleft -ruby -scrollbind -signs -smartindent -sniff 
-startuptime -statusline -sun_workshop -syntax -tag_binary -tag_old_static 
-tag_any_white -tcl +terminfo -termresponse -textobjects -title -toolbar 
-user_commands -vertsplit -virtualedit +visual -visualextra -viminfo -vreplace 
+wildignore -wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp 
-xterm_clipboard -xterm_save 
    system vimrc file: "/etc/virc" 
    user vimrc file: "$HOME/.vimrc" 
     user exrc file: "$HOME/.exrc" 
    fall-back for $VIM: "/usr/share/vim" 
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H  -O2 -g -pipe -Wall -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=1   
Linking: gcc -L/usr/local/lib -o vim  -lm -lselinux -lncurses -lacl 

И мой .vimrc:

# cat ~/.vimrc 
function Fun1() 
     :!ls 
endfunction 

Название функции не имеет значения, я изменил имя в качестве теста.

Обновление от 8 июля 2015 года:

Согласно ответу от Бен, и так как я хотел бы мой .vimrc быть совместим в течение нескольких сред, я оберните определение функции с if has('eval')...endif как моим Finial решение :

+1

@ lcd047, Да .. Это vim, установленный в моей продукции. У меня нет выбора. –

+0

Вы где-то переназначаете его как nnoremap ls: звоните Fun1() или что-то в этом роде? Он не должен запускаться автоматически, возможно, вы можете опубликовать любые другие соответствующие части вашего vimrc? – f41lurizer

ответ

5

Ваш vim составлен без поддержки "eval". Это означает, что ваш Vim не поддерживает определяющие функции. Поэтому команда открытия function Fun1() недействительна и игнорируется. Затем выполняется определение функции, потому что являются действительными командами.

Вам необходимо установить более полнофункциональный Vim или скомпилировать собственный Vim или найти альтернативную установку Vim в вашей системе, которая имеет больше возможностей. «eval» поставляется с набором функций NORMAL или больше.

+0

Спасибо за ваш ответ, и так как я хотел бы, чтобы этот .vimrc был совместим в нескольких средах, я буду обертывать свою функцию с помощью 'if has ('eval') ... endif'. –

Смежные вопросы