Использование оператора if внутри файла _vimrc? - PullRequest
2 голосов
/ 10 декабря 2010

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

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

1 Ответ

2 голосов
/ 10 декабря 2010

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

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

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

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

...