diff --git a/vim/plugin/cf5-compiler.vim b/vim/plugin/cf5-compiler.vim index 2632428..c8310e5 100755 --- a/vim/plugin/cf5-compiler.vim +++ b/vim/plugin/cf5-compiler.vim @@ -1,6 +1,5 @@ " " -" {{{1 " Functions to compile and link a single c/cpp/java files. " " let g:cf5output @@ -20,7 +19,22 @@ if !exists('*FirstModeLine') endif " -" Windows {{{1 +" Init global variables with default values. +" +function! s:initDefaults() + let g:cf5output=0 + let g:argv="" + let g:pyflags="" + let g:cppflags="" + let g:wcppflags="/O2 /EHsc /DWIN32" + let g:lcppflags="-O2" + let g:ldflags="" + let g:wldflags="" + let g:ldlibpath="" +endfunction + +" +" Microsoft Visual C++ " function! s:CompileMSVC(run) "{{{2 let exename=expand("%:p:r:s,$,.exe,") @@ -51,60 +65,8 @@ function! s:CompileMSVC(run) "{{{2 endif endfunction -function! s:CompileJava(run) "{{{2 - " compile it - let cmd = "javac " . g:javaflags . " " . expand("%") - echo cmd - let cout = system( cmd ) - echo cout - if v:shell_error - return - endif - " run it - "let classpath=expand("%:p:r") - let exename=expand("%:r") - let cmd = "java " . exename . " " . g:argv - echo cmd - let eout = system( cmd ) - echo eout -endfunction - -function! s:InterpretPython(run) "{{{2 - " Interpret it - let cmd = "python " . g:pyflags . " " . expand("%") - echo cmd - let cout = system( cmd ) - echo cout - if v:shell_error - return - endif - " run it - "let classpath=expand("%:p:r") - "let exename=expand("%:r") - "let cmd = "java " . exename . " " . g:argv - "echo cmd - "let eout = system( cmd ) - "echo eout -endfunction - -function! s:CompileWindows(run) "{{{2 - let ext=expand("%:e") - if ext=="java" - call s:CompileJava(a:run) - endif - if ext=="cpp" - call s:CompileMSVC(a:run) - endif - if ext=="c" - call s:CompileMSVC(a:run) - endif - if ext=="py" - call s:InterpretPython(a:run) - endif -endfunction - " -" Linux {{{1 +" GCC " function! s:CompileGCC(run) "{{{2 let exename=expand("%:p:r:s,$,.exe,") @@ -128,20 +90,49 @@ function! s:CompileGCC(run) "{{{2 endif endfunction -function! s:CompileLinux(run) "{{{2 - let ext=expand("%:e") - if ext=="java" - call s:CompileJava(a:run) +function! s:CompileJava(run) "{{{2 + " compile it + let cmd = "javac " . g:javaflags . " " . expand("%") + echo cmd + let cout = system( cmd ) + echo cout + if v:shell_error + return endif - if ext=="cpp" - call s:CompileGCC(a:run) + " run it + "let classpath=expand("%:p:r") + let exename=expand("%:r") + let cmd = "java " . exename . " " . g:argv + echo cmd + let eout = system( cmd ) + echo eout +endfunction + +function! s:InterpretPython(run) + " Interpret it + let cmd = "python " . g:pyflags . " " . expand("%") + echo cmd + let cout = system( cmd ) + echo cout + if v:shell_error + return endif - if ext=="c" - call s:CompileGCC(a:run) +endfunction + +function! s:Compile(run) + if &filetype=="c" || &filetype=="cpp" + if has("win32") || has("win64") + call s:CompileMSVC(a:run) + else + call s:CompileGCC(a:run) + endif endif - if ext=="py" + if &filetype=="python" call s:InterpretPython(a:run) endif + if &filetype=="java" + call s:CompileJava(a:run) + endif endfunction " @@ -197,23 +188,13 @@ function! s:clearOutputWindow() endif endfunction " -" Init global variables with default values. {{{1 -" -function! s:initDefaults() - let g:cf5output=0 - let g:argv="" - let g:pyflags="" - let g:cppflags="" - let g:wcppflags="/O2 /EHsc /DWIN32" - let g:lcppflags="-O2" - let g:ldflags="" - let g:wldflags="" - let g:ldlibpath="" -endfunction -" " Load compile instructions and call window or linux compiler. {{{1 " function! CF5Compile(run) + " + " Interpreters and compilers don't work with buffers, but ratter they run + " on files. So, make sure that the file is updated. + " if &modified == 1 echo "The buffer is not saved. First save it." return @@ -226,9 +207,6 @@ function! CF5Compile(run) " Set source specific compiler options. " call FirstModeLine() - "if exists("g:cf5script") - " execute g:cf5script - "endif " " Clear output window " @@ -236,10 +214,6 @@ function! CF5Compile(run) " " Compile. " - if has("win32") || has("win64") - call s:CompileWindows(a:run) - else - call s:CompileLinux(a:run) - endif + call s:Compile(a:run) endfunction