2010-12-10 5 views
2

Я попытался создать функцию в своем конфигурационном файле vim, чтобы я мог «скомпилировать и запустить» в соответствии с типом файла (в основном я работаю с Fortran, C и Python). Он сделал работу за исключением того, что каждый раз после того, как скомпилированный исполняемый файл бежал, было бы уведомление в нижней части моего Vim говоря: обнаруженИспользование инструкции if в файле _vimrc?

Ошибка при обработке функции CompileRun: линии 17: E171: Missing: 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

Скорее всего, потому что одна из ваших команд что-то бросает.

Кстати, не по теме:

  • посмотреть на :make и &makeprg
  • gnumake не требуется никаких Makefile для проектов моно-файлов; поэтому просто: :make %< будет достаточно, и не нужно указывать &makeprg. (Он работает с C, C++ и, возможно, fortran)
  • :exec абсолютно бесполезен в ваших вызовах.
  • Вы действительно хотите выполнить :insert в конце ваших функций? Попробуйте без этого вызова.
  • Вы можете ограничить отображение в нормальном режиме. Он не будет работать в других режимах, например, что =>

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

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