2010-12-10 36 views
2

我嘗試在我的vim配置文件中創建一個函數,以便根據文件類型(我主要使用Fortran,C和Python)「編譯和運行」。它的工作只是每一編譯的可執行文件運行後時間,就在我的vim的底部的通知說: 線17: E171:處理功能CompileRun檢測在_vimrc文件中使用if語句?

錯誤缺少:ENDIF

我不知道「第17行」和「E171」意味着什麼,因爲它們不能與源文件或_vimrc文件相關,也似乎if語句被關閉。我搜索了很多,但沒有找到答案。我的功能如下:

map <F4> : call CompileRun()<CR> 

func! CompileRun() 

    if &filetype == 'fortran' 
    exec "w" 
    exec "!gfortran % -o %<" 
    exec "!%<.exe" 
    exec "i" 

    elseif &filetype == 'c' 
    exec "w" 
    exec "!gcc % -o %<" 
    exec "!%<.exe" 
    exec "i" 

    elseif &filetype == 'python' 
    exec "w" 
    exec "!python %<.py" 
    exec "i" 
    endif 
endfunc 
+0

複製功能身體進入我的VIM(7.3)時,我沒有得到任何錯誤,它保存爲test.vim,採購工作該文件和調用CompileRun()... – eckes 2010-12-10 07:40:50

+0

我也使用vim 7.3,但vim總是在編譯並運行它後將部分函數插入到我的代碼中。如果這沒有發生在你身上,我完全困惑... – mayasky 2010-12-11 04:21:01

回答

2

這很可能是因爲你的一個命令拋出了一些東西。

BTW,題外話:

  • 看看:make&makeprg
  • gnumake的不必需的單文件項目的任何makefile文件;因此只需::make %<就足夠了,也不需要指定任何&makeprg。 (它肯定與C,C++和Fortran一起工​​作)
  • :exec在您的調用中完全沒用。
  • 您確定要在功能結束時執行:insert嗎?嘗試沒有這個電話。
  • 您可以限制您的映射到正常模式。它不會在其他模式一樣,=>

    nnoremap <F4> :call Compile()<cr>