*SingleCompile.txt* File: SingleCompile.txt Version: 2.12.0 Original Author and Current Maintainer: Hong Xu Last Change: 11 June 2013 Homepage: http://www.topbug.net/SingleCompile GitHub repo: https://github.com/xuhdev/SingleCompile Description: Make it more convenient to compile or run a single source file. License: Copyright (C) 2010-2014 Hong Xu This file is part of SingleCompile. SingleCompile is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. SingleCompile is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with SingleCompile. If not, see . CONTENTS~ *SingleCompile-contents* ---------------------------------------------------------------------------- 1. Overview |SingleCompile-overview| 2. Installation |SingleCompile-installation| 3. Commands |SingleCompile-commands| 4. Settings |SingleCompile-settings| 5. Key-mappings |SingleCompile-key-mapping| 6. Compiler template |SingleCompile-compiler-template| 7. Supporting plugins |SingleCompile-supporting-plugins| 8. Advanced |SingleCompile-advanced| 9. Credits |SingleCompile-credits| 10. Todo |SingleCompile-todo| OVERVIEW~ *SingleCompile-overview* ---------------------------------------------------------------------------- This plugin is aimed at making it more convenient to compile or run a single source file without leaving vim. A short introduction is available here: http://www.topbug.net/blog/2012/03/07/use-singlecompile-to-compile-and-run-a-single-source-file-easily-in-vim/ Consider this situation: you have just written a small c source file for a small test, but you have to write a Makefile to compile it or exit vim to compile it or compile it using "!gcc" without quickfix feature because vim's make command only use the "make" command? This plugin will help you out. Add these key-mappings to your vimrc: > nmap :SCCompile nmap :SCCompileRun < Note that the two lines here should not have any trailing space. If your file type is supported, then press F9 to compile your source file, and press F10 to compile and run your source file. If there is a compilation error, and the |quickfix| feature is enabled, then you could use |:cope| command to see the error list. You may also use ":SCChooseCompiler" command to choose a compiler if you have more than one kind of compiler available on you system. ":SCViewResult" will show you the last run result. Features: 1. Compile or run the source file quickly using |quickfix| feature and |compiler| feature of vim; 2. Compilers and interpreters auto detecting; 3. Fast switch between several installed compilers or interpreters; 4. Multi-language support; 5. Custom your own compiler/interpreter template; 6. View the result of last run command at any time(requires "tee" command); 7. Run the compiled program asynchronously and view the result at any time (see |:SCCompileRunAsync|). The complete list of built-in compiler templates is at |SingleCompile-built-in-compiler|. You can add your compiler or interpreter support if the compiler or interpreter you want is not in the list. See details in the help file. There are some supporting code in this plugin for Marc Weber's vim-addon-actions: http://github.com/MarcWeber/vim-addon-actions If you find any bug, please report it to hong@topbug.net or submit it on the issue tracker: https://bitbucket.org/xuhdev/singlecompile/issues If you've written some templates for some compilers or interpreters which are not included as built-in template, and you think they are useful for other people, you could send me an email to inform me, and I'll put them in the built-in templates. Git repository on github.com: https://github.com/xuhdev/SingleCompile Mercurial repository on bitbucket.org: https://bitbucket.org/xuhdev/singlecompile Follow xuhdev on twitter if you are interested in my development: http://twitter.com/xuhdev INSTALLATION~ *SingleCompile-installation* ---------------------------------------------------------------------------- Download the SingleCompile.zip file and extract it to your vim runtime directory(~/.vim on linux and $VIM_INSTALLATION_FOLDER\vimfiles on windows), you'd better then use ":helptags" command to generate the help tag(for example use ":helptags ~/.vim/doc" on UNIX/Linux). COMMANDS~ *SingleCompile-commands* ---------------------------------------------------------------------------- *:SCCompile* Command: :SCCompile If you are editing a source file of a compiling language such as C, Java, this command will compile the file which you are editing now. If you are editing a source file of a interpreted language such as python language, this command will run the file which you are editing. See |SingleCompile-compiler-template| about the compilation command. You can add some arguments after the command. For example, you want to compile your c source file with "-g -o %<" flag instead of the "-o %<" flag defined in the language template(see |SingleCompile-compiler-template|) for just this time, just use the following command: > :SCCompile -g -o %< < "%<" means the current file name without extension. Also see |:SCCompileAF|. *:SingleCompile* Command: :SingleCompile Same as |:SCCompile|, only for backward compatibility use. Not recommended to use any more. *:SCCompileAF* Command: :SCCompileAF This command is also used for compiling your source file, but it allows you to append some additional compilation or interpretion flags other than the flags already defined in the compiler and interpreter template. The "AF" is short for "Addtional Flags". For example, GCC compiler for C has already been defined some flags: "-o "%<"". But sometimes you also want to use "-O2" flag to optimize your code, then you can use the following commands to compile your file: > :SCCompileAF -O2 < :SCCompile can also be used with some arguments, but there are some differences. :SCCompileAF use your arguments as "additional" compilation flags, which means the flags defined in the original templates are also valid, while :SCCompile use you arguments as compilation flags only, which means the flags defined in the original templates are not used. For example, the templates of GCC defined "flags" as '-o "%<"', "%<" stands for the output file name. ":SCCompile -O2" will use "gcc -O2 some_file.c" to compile your source file, while ":SCCompileAF -O2" will use "gcc -o some_file -O2 some_file.c" to compile your source file. *:SCCompileRun* Command: :SCCompileRun If you are editing a source file of a compiling language such as C, Java, this command will compile the file which you are editing now and run the executable; if you are editing a source file of a interpreted language such as python, ruby, this command will run the source file you are editing. That means, there is nothing different between |:SCCompile| and |:SCCompileRun| for an interpreted language source file. You can also add some arguments after SCCompileRun command, the meaning of arguments is the same as SingleCompile command above. Here is an example: > :SCCompileRun -g -o %< < When the program you've just compiled (or the script you've just written) runs, vim will hang up to wait for the program to terminate. If you do not want vim to hang up when running the program, use |:SCCompileRunAsync| instead. See |:SCCompileRunAsync| for further information. *:SingleCompileRun* Command: :SingleCompileRun Same as |:SCCompileRun|, only for backward compatibility use. Not recommended to use any more. *:SCCompileRunAF* Command: :SCCompileRunAF Same as |:SCCompileAF|, but also run the binary file after compilation. For example, the following command is going to compile your source file with an additional "-O2" flag and run the output binary file: > :SCCompileRunAF -O2 < *:SCCompileRunAsync* Command: :SCCompileRunAsync Same as |:SCCompileRun|, but compile the source and run asynchronously. That is to say, after the program starts to run, you are still able to edit the source file, because vim does not hang up waiting for the program to terminate. The result of the run could be viewed by |:SCViewResultAsync| command. This command might not be available on your vim, see |SingleCompile-asyncrunmode| for more information. This command is useful when the program takes a long time to run or you are developing a GUI program. Also see |:SCViewResultAsync|, |:SCTerminateAsync| and |:SCIsRunningAsync|. *:SCCompileRunAsyncAF* Command: :SCCompileRunAsyncAF Same as |:SCCompileRunAF|, but compile the source and run asynchronously. The result of the run could be viewed by |:SCViewResultAsync| command. This command is disabled by default, to enable it, see |SingleCompile-asyncrunmode|. Also see |:SCCompileRunAsync|. *:SCChooseCompiler* Command: :SCChooseCompiler Choose a compiler to use. This command will display a list of compilers for you to choose one. If you want to set a default compiler in your vimrc, please use the function SingleCompile#ChooseCompiler. See |SingleCompile-use-built-in-template|. *:SCChooseInterpreter* Command: :SCChooseInterpreter Same as |:SCChooseCompiler|. *:SCIsRunningAsync* Command: :SCIsRunningAsync Check whether the asynchronously run process is still running. Also see |:SCCompileRunAsync|. *:SCTerminateAsync* Command: :SCTerminateAsync Terminate the process which is running asynchronously if exists. Also see |:SCCompileRunAsync|. *:SCViewResult* Command: :SCViewResult View the result of the last run command. Only valid when "tee" command is available. "tee" is usually available on a UNIX system. If you are under Windows, install cygwin or visit the following link to download a "tee" command for Windows: http://gnuwin32.sourceforge.net/packages/coreutils.htm NOTE: When you disable "tee" by setting |SingleCompile_usetee| to 0, you will disable this feature. *:SCViewResultAsync* Command: :SCViewResultAsync Same as |:SCViewResult|, but the result displayed is the result of the process run by |:SCCompileRunAsync| or |:SCCompileRunAsyncAF|. SETTINGS~ *SingleCompile-settings* ---------------------------------------------------------------------------- *g:SingleCompile_alwayscompile* If g:SingleCompile_alwayscompile is set to 0, when using |:SCCompileRun| command, SingleCompile may run the output of the compilation directly if the modification time of the source file is earlier than the output file. If you want to enable this feature, add the following line to your vimrc: > let g:SingleCompile_alwayscompile = 0 < The default value of g:SingleCompile_alwayscompile is 1. *g:SingleCompile_asyncrunmode* This option specifies the asynchronous mode for |:SCCompileRunAsync| and |:SCCompileRunAsyncAF|. The default value is "auto", which means SingleCompile will automatically detect whether you are able to enable async run mode and select one mode for you. Use the following line, replace modename with the mode you want to change mode: > let g:SingleCompile_asyncrunmode = 'modename' < Here is a list of available mode: auto This is the default value. SingleCompile automatically selects one mode for you. > let g:SingleCompile_asyncrunmode = 'auto' < none Disable asynchronous mode, which means |:SCCompileRunAsync| and |:SCCompileRunAsyncAF| and related commands are disabled. > let g:SingleCompile_asyncrunmode = 'none' < python Use python interface when running asynchronously. Required vim compiled with python interface 2.6+. See |+python|. > let g:SingleCompile_asyncrunmode = 'python' < *g:SingleCompile_autowrite* If you don't want to save your file automatically when you use "SingleCompile" command or "SingleCompileRun" command, add the following line to your vimrc: > let g:SingleCompile_autowrite = 0 < NOTE: If you let g:SingleCompile_usequickfix=1, this option will take no effect, the running result will depend on the vim's option 'autowrite'. See 'autowrite' for more information. *SingleCompile-menumode* *g:SingleCompile_menumode* If you don't want the menus of SingleCompile to show, copy the following line to your vimrc: > let g:SingleCompile_menumode = 0 < If you want the menus of SingleCompile to show as a sub menu of Plugin, copy the following line to your vimrc: > let g:SingleCompile_menumode = 1 < If you want the menus of SingleCompile to show in the menu bar, copy the following line to your vimrc: > let g:SingleCompile_menumode = 2 < The default value is 1. *SingleCompile-quickfixwindowposition* *g:SingleCompile_quickfixwindowposition* If |g:SingleCompile_showquickfixiferror| is set to 1, |g:SingleCompile_quickfixwindowposition| defines the position where quickfix window shows up. The default value is "botright", but you can change this value by add the following line to your vimrc file: > let g:SingleCompile_quickfixwindowposition = 'some_position' < Accepted values are "aboveleft", "topleft", "botright", "belowright", "vertical", "leftabove", etc. SingleCompile will simply prepend |g:SingleCompile_quickfixwindowposition| to 'cope' and 'cw' commands. See |opening-window| and 'cope' for more details. *SingleCompile-resultsize* *g:SingleCompile_resultsize* g:SingleCompile_resultsize is the height/width of the result displaying window triggered by |:SCViewResult| command. To set the value, add the following line to your vimrc file: > let g:SingleCompile_resultsize = a_number < Replace a_number to any number you want, such as "10", "4". The default value of g:SingleCompile_resultsize is 5. *SingleCompile-split* *g:SingleCompile_split* g:SingleCompile_split is the command used to open the result window triggered by |:SCViewResult| command. To set the value, add the following line to your vimrc file: > let g:SingleCompile_split = 'vsplit' < or > let g:SingleCompile_split = 'tabe' < It is also possible to select between vertical or horizontal split depending on the current window width. To achieve this it is necessary to update the plugin options on the mapping that calls |:SCCompileRun|. This can be done in a new mapping, or replacing the default mapping to |:SCCompileRun|, : > nnoremap :call SingleCompileSplit() \| SCCompileRun function! SingleCompileSplit() if winwidth(0) > 160 let g:SingleCompile_split = "vsplit" let g:SingleCompile_resultsize = winwidth(0)/2 else let g:SingleCompile_split = "split" let g:SingleCompile_resultsize = 15 endif endfunction < The default value is `'split'`. *SingleCompile-showquickfixiferror* *g:SingleCompile_showquickfixiferror* If |quickfix| is enabled and used, and you want the quickfix window to show automatically if there is a compilation error, then add the following line to your vimrc file: > let g:SingleCompile_showquickfixiferror = 1 < The default value of g:SingleCompile_showquickfixiferror is 0. You may want to use this option with |SingleCompile-silentcompileifshowquickfix|. Note that this option will be ignored if you are using interpreting languages on Windows, such as Python, Ruby. Also see |SingleCompile-showquickfixifwarning|. *SingleCompile-showquickfixifwarning* *g:SingleCompile_showquickfixifwarning* If |quickfix| is enabled and used, and you want the quickfix window to show automatically if there is a compilation warning. This setting is only valid when |g:SingleCompile_showquickfixiferror| is set to 1. > let g:SingleCompile_showquickfixifwarning = 0 < The default value of g:SingleCompile_showquickfixifwarning is as same as g:SingleCompile_showquickfixiferror. You don't want miss a warning, will you? *SingleCompile-showresultafterrun* *g:SingleCompile_showresultafterrun* If "tee" command is available on your system, copy the following line to your vimrc file will make vim show the result of the run automatically after you run the program: > let g:SingleCompile_showresultafterrun = 1 < This option is only valid for synchronous run. That is to say, asynchronous run is not affected by this option. The default value of g:SingleCompile_showresultafterrun is 0. Also see |:SCViewResult|. *SingleCompile-silentcompileifshowquickfix* *g:SingleCompile_silentcompileifshowquickfix* Avoid the additional hit of enter when using quickfix feature to compile. This is done by dismisses the output of the compilation (:silent make). This feature is only valid when showquickfixiferror is enabled. This feature won't enable on terminal because of the problem of screen refresh. > let g:SingleCompile_silentcompileifshowquickfix = 1 < This is not default enabled for compatible. *SingleCompile-usedialog* *g:SingleCompile_usedialog* If you want SingleCompile to show message in a dialog, add the following line to your vimrc: > let g:SingleCompile_usedialog = 1 < This setting will take no effect if your vim is not compiled with '+dialog_con' and '+dialog_gui'. *SingleCompile-usetee* *g:SingleCompile_usetee* When set to 0, the use of tee is disabled when running your compiled program. This would make the flush of the display of the output of your program perform normally but you will lose the feature of |SCViewResult|. > let g:SingleCompile_usetee = 0 < The default value of g:SingleCompile_usetee is 1. *SingleCompile-usequickfix* *g:SingleCompile_usequickfix* If you don't want SingleCompile to use quickfix feature, add the following line to your vimrc: > let g:SingleCompile_usequickfix = 0 < KEY-MAPPING~ *SingleCompile-key-mapping* ---------------------------------------------------------------------------- I recommend you to copy the following two lines about key mapping to your vimrc: > nmap :SingleCompile nmap :SingleCompileRun < Then you can press F9 to compile, and F10 to compile and run. COMPILER-TEMPLATE~ *SingleCompile-compiler-template* ---------------------------------------------------------------------------- *SingleCompile-use-built-in-template* *SingleCompile#ChooseCompiler* To use a built-in compiler, add the following line to your vimrc file: > call SingleCompile#ChooseCompiler('filetype', 'compiler') < "filetype" is the type of file which your compiler is for, such as "c", "python", and "compiler" is the short name of the compiler. "filetype" is a terminology of vim. See |filetype| if you don't know what is "filetype". For example: > call SingleCompile#ChooseCompiler('c', 'icc') call SingleCompile#ChooseCompiler('fortran', 'gfortran') < This will choose icc (short for Intel C++ Compiler) as your current C compiler and choose gfortran (GNU Fortran Compiler) as your current Fortran compiler. For the list of built-in supported compilers, see |SingleCompile-built-in-compilers|. If you don't choose a compiler by yourself, SingleCompile will automatically choose one for you according to the compiler's priority value (See |SingleCompile-priority|). You can also extend the compiler template if the compiler you want is not in the built-in supporting list. SingleCompile#ChooseCompiler could also be used to choose a user defined compiler. Check |SingleCompile-add-your-compiler| for more information. *SingleCompile-add-your-compiler* *SingleCompile#SetCompilerTemplate* To add a new compiler support by yourself, there are two ways: 1. (Recommended) Add the following lines to your vimrc file: > call SingleCompile#SetCompilerTemplate('filetype', 'compiler', 'compiler_name', 'command', 'flag', 'run_command') call SingleCompile#SetOutfile('filetype', 'compiler', 'out_file') call SingleCompile#ChooseCompiler('filetype', 'compiler') < Now Let's see the first line. "filetype" is the source file type, such as "c", "cpp", "python", etc. It is a terminology of vim. See |filetype| if you don't know what is "filetype". For compiling languages such as C, Java, Fortran, "compiler" is the short name for the compiler, such as "gcc", "icc"; "command" is the command of compiling, such as "gcc", "g++"; "flag" is the flags of compiling, such as "-O2"; "run_command" is the command of running, such as "./a.out". For interpreted languages such as Python, Ruby, "command" is the command of interpreting, such as "python"; "flag" is the flags of interpreting; and "run_command" MUST be set to be empty. For the second line, "filetype" and "compiler" has the same meanings with the first line. "out_file" is the output file of the compilation, such as "./a.out", "./a.exe", etc. This line could be omitted if you don't want SingleCompile to check whether compilation is needed. See |SingleCompile-alwayscompile| for more information. There are four special variable that you can use: '$(FILE_NAME)$' returns the "%". '$(FILE_PATH)$' returns "%:p". '$(FILE_TITLE)$' returns "%:r". '$(FILE_EXEC)$' returns "%:r.exe" on windows and "%:r" on unix. '$(FILE_RUN)$' returns "%:r.exe" on windows and "./%:r" on unix. Also see |%|. The first two lines are to set the template of your compiler, while the third line is to tell SingleCompile to use your compiler. If the second line is omitted, SingleCompile will detect the compilers available on your system automatically, and use the first detected one. Here are some examples modified from built-in compiler templates: > " set the most common used run command " you may also use $(FILE_RUN)$ as an alternative. if has('win32') || has('win64') || has('os2') let l:common_run_command = '$(FILE_TITLE)$' let l:common_out_file = '$(FILE_TITLE)$.exe' else let l:common_run_command = './$(FILE_TITLE)$' let l:common_out_file = '$(FILE_TITLE)$' endif " c call SingleCompile#SetCompilerTemplate('c', 'gcc', 'GNU C Compiler', \'gcc', '-o $(FILE_TITLE)$', l:common_run_command) call SingleCompile#SetOutfile('c', 'gcc', l:common_out_file) call SingleCompile#SetCompilerTemplate('c', 'icc', \'Intel C++ Compiler', 'icc', '-o $(FILE_TITLE)$', \l:common_run_command) call SingleCompile#SetOutfile('c', 'icc', l:common_out_file) call SingleCompile#ChooseCompiler('c', 'gcc') " fortran call SingleCompile#SetCompilerTemplate('fortran', 'g77', \'GNU Fortran 77 Compiler', 'g77', '-o $(FILE_TITLE)$', \l:common_run_command) call SingleCompile#SetOutfile('fortran', 'g77', l:common_out_file) call SingleCompile#SetCompilerTemplate('fortran', 'ifort', \'Intel Fortran Compiler', 'ifort', '-o $(FILE_TITLE)$', \l:common_run_command) call SingleCompile#SetOutfile('fortran', 'ifort', l:common_out_file) call SingleCompile#ChooseCompiler('fortran', 'g77') " python call SingleCompile#SetCompilerTemplate('python', 'python', 'CPython', \'python', '', '') call SingleCompile#SetCompilerTemplate('python', 'jython', 'Jython', \'jython', '', '') call SingleCompile#ChooseCompiler('python', 'jython') < 2. (Deprecated, only kept for backward compatibility use) If you use this method to add a language template, many features of SingleCompile will be unavailable. For example, ":SCChooseCompiler" command will not be available. So I don't recommend you to use this method, and this method is kept ONLY for backward compatibility. Add the following lines to your vimrc file: > call SingleCompile#SetTemplate('filetype', 'command', 'stringA') call SingleCompile#SetTemplate('filetype', 'flags', 'stringB') call SingleCompile#SetTemplate('filetype', 'run', 'stringC') < For compiling languages such as C, Java, stringA is the command of compiling, stringB is the flags of compiling, stringC is the command of running; For interpreted languages such as Python, Ruby, stringA is the command of interpreting, stringB is the flags of interpreting, stringC MUST be set to be empty. Here are some examples: > " java call SingleCompile#SetTemplate('java', 'command', 'javac') call SingleCompile#SetTemplate('java', 'flags', '') call SingleCompile#SetTemplate('java', 'run', 'java %<') " python call SingleCompile#SetTemplate('python', 'command', 'python') call SingleCompile#SetTemplate('python', 'flags', '') call SingleCompile#SetTemplate('python', 'run', '') " latex call SingleCompile#SetTemplate('tex', 'command', 'latex') call SingleCompile#SetTemplate('tex', 'flags', '') if has('unix') call SingleCompile#SetTemplate('tex', 'run', 'xdvi %<.dvi') elseif has('win32') call SingleCompile#SetTemplate('tex', 'run', 'dviout %<.dvi') endif < You can also use this method to modify the templates of a built-in supported language. For example, you can change 'dviout' to 'yap' in the example above to modify the built-in latex language template. Advanced: If you don't want to override the template if there is an existing one, but use the new template if there is no corresponding template existing, for example, you want to set the "command" of java language to javac if no command is set for java, but do nothing if the command of java is not set, use the following: > call SingleCompile#SetTemplate('java', 'command', 'javac', 1) < In this way, if the command of java is already set, this sentence will do nothing. On the contrary, if the command of java is not set, it will set the compilation command of java to "javac". *SingleCompile-built-in-compiler* The following compilers have built-in support in this plugin (For some compilers/interpreters, you need to set the environment varibles correctly to make them available for SingleCompile): Ada: gnat (GNAT) bash: bash (Bourne-Again Shell) C: bcc (Borland C++ Builder), Windows only cc (UNIX C Compiler), UNIX only ch (SoftIntegration Ch) clang (the Clang C and Objective-C compiler) gcc (GNU C Compiler) icc (Intel C++ Compiler) lcc (Little C Compiler) msvc (Microsoft Visual C++ (In PATH)), Windows only msvc80 (Microsoft Visual C++ 2005), Windows only msvc90 (Microsoft Visual C++ 2008), Windows only msvc100 (Microsoft Visual C++ 2010), Windows only msvc110 (Microsoft Visual C++ 2012), Windows only open-watcom (Open Watcom C/C++32 Compiler) open64 (Open64 C Compiler), UNIX only pcc (Portable C Compiler) sol-studio (Sun C Compiler(Sun Solaris Studio)), UNIX only tcc (Tiny C Compiler) tcc-run (Tiny C Compiler with "-run" Flag) C++: bcc (Borland C++ Builder), Windows Only ch (SoftIntegration Ch) clang (the Clang C and Objective-C compiler) g++ (GNU C++ Compiler) icc (Intel C++ Compiler) msvc (Microsoft Visual C++ (In PATH)), Windows only msvc80 (Microsoft Visual C++ 2005), Windows only msvc90 (Microsoft Visual C++ 2008), Windows only msvc100 (Microsoft Visual C++ 2010), Windows only msvc110 (Microsoft Visual C++ 2012), Windows only open-watcom (Open Watcom C/C++32 Compiler) open64 (Open64 C++ Compiler), UNIX only sol-studio (Sun C++ Compiler(Sun Solaris Studio)), UNIX only C#: msvcs(Microsoft Visual C#), Windows Only mono (Mono C# compiler) cmake: cmake (cmake) CoffeeScript: coffee (CoffeeScript) csh: csh (C Shell) tcsh (TENEX C Shell) D: dmd (DMD Compiler) dos batch: dosbatch (DOS Batch) erlang: escript (Erlang Scripting Support) Elixir: elixir (Elixir) Fortran: ftn95 (Silverfrost FTN95), Windows only g77 (GNU Fortran 77 Compiler) g95 (G95) gfortran (GNU Fortran Compiler) ifort (Intel Fortran Compiler) open-watcom (Open Watcom Fortran 77/32 Compiler) open64-f90 (Open64 Fortran 90 Compiler), UNIX only open64-f95 (Open64 Fortran 95 Compiler), UNIX only sol-studio-f77 (Sun Fortran 77 Compiler(Sun Solaris Studio)), UNIX only sol-studio-f90 (Sun Fortran 90 Compiler(Sun Solaris Studio)), UNIX only sol-studio-f95 (Sun Fortran 95 Compiler(Sun Solaris Studio)), UNIX only Go: go (Go) Haskell: ghc (Glasgow Haskell Compiler) runhaskell (runhaskell) html: arora (Arora) chrome (Google Chrome) chromium (Chromium) epiphany (Epiphany) firefox (Mozilla Firefox) ie (Microsoft Internet Explorer) konqueror (Konqueror) opera (Opera) IDL(Interactive Data Language): idl (ITT Visual Information Solutions Interactive Data Language) gdl (GNU Data Language incremental compiler) Java: gcj (GNU Java Compiler) sunjdk (Sun Java Development Kit) JavaScript: gjs (Javascript Bindings for GNOME) js (SpiderMonkey, a JavaScript engine written in C) node.js (node.js) rhino (Rhino, a JavaScript engine written in Java) ksh: ksh (Korn Shell) LaTeX: latex (LaTeX) pdflatex (pdfLaTeX) latexmk (Automatic LaTeX document generation routine) LISP: clisp (GNU CLISP) ecl (Embeddable Common-Lisp) gcl (GNU Common Lisp) LiveScript: lsc (LiveScript) lua: lua (Lua Interpreter) Makefile: gmake (GNU Make) nmake (Microsoft Program Maintenance Utility) mingw32-make (MinGW32 Make) Markdown: markdown (text-to-HTML conversion tool) rdiscount (Discount Markdown Processor for Ruby) Markdown (Python implementation of the Markdown language) Matlab: matlab (MathWorks MATLAB) Note: For Matlab, I highly recommend you to try out vim-matlab-behave plugin: https://github.com/elmanuelito/vim-matlab-behave octave (GNU Octave) Object-C: clang (the Clang C and Objective-C compiler) gcc (GNU Object-C Compiler) OCaml: ocaml (OCaml) Pascal: fpc (Free Pascal Compiler) gpc (GNU Pascal Compiler) perl: perl (Perl Interpreter) PHP: php (PHP Command Line Interface 'CLI') python: ironpython (IronPython) jython (Jython) pypy (PyPy) python (Python Interpreter, usually the system default Python, no matter it is Python 2 or 3.) python2 (Python 2 Interpreter) python3 (Python 3 Interpreter) QML: qmlscene (QML Scene, for viewing QML based on QtQuick 2) qmlviewer (QML Viewer, for viewing QML based on QtQuick 1) Note: vim does not detect qml files out of the box. See https://github.com/peterhoeg/vim-qml R: R (R) reStructuredText: rst2html (reST to HTML) ruby: ruby (Ruby Interpreter) jruby (Ruby on top of Java JVM, default mode) jruby1.8 (Ruby on top of Java JVM, Ruby 1.8 mode) jruby1.9 (Ruby on top of Java JVM, Ruby 1.9 mode) jruby2.0 (Ruby on top of Java JVM, Ruby 2.0 mode, requires JRuby 1.7.4 or later) rust: rustc (Rust compiler) scala: scala (Scala compiler) Note: vim does not detect scala files out the box. See https://github.com/bjartek/scala-vim-support sh: ash (Almquist Shell) bash (Bourne-Again Shell) dash (Debian Almquist Shell) ksh (Korn Shell) sh (Bourne Shell) zsh (Z Shell) tcl: tclsh (Simple shell containing Tcl interpreter) tcsh: tcsh (TENEX C Shell) vb script: vb (VB Script Interpreter) xhtml: arora (Arora) chrome (Google Chrome) epiphany (Epiphany) firefox (Mozilla Firefox) ie (Microsoft Internet Explorer) konqueror (Konqueror) opera (Opera) zsh: zsh (Z Shell) See |SingleCompile-add-your-compiler| to add your compiler support. SUPPORTINGS~ *SingleCompile-supporting-plugins* ---------------------------------------------------------------------------- There are some supporting code in this plugin for Marc Weber's vim-addon-actions: http://github.com/MarcWeber/vim-addon-actions ADVANCED~ *SingleCompile-advanced* ---------------------------------------------------------------------------- This chapter is for advanced users. *SingleCompile-custom-compiler-detecting* SingleCompile allows you to custom compiler detecting function by yourself. In |SingleCompile-compiler-template|, the following function is introduced: > call SingleCompile#SetCompilerTemplate('filetype', 'compiler', \'compiler_name', 'command', 'flag', 'run_command') < However, in fact, the function SingleCompile#SetCompilerTemplate could have a seventh parameter. The seventh parameter is a |Funcref| which references to a compiler detecting function. The compiler detecting function will be called in the function SingleCompile#SetCompilerTemplate. The compiler detecting function must accept one parameter, which would be passed in the "command" parameter in SingleCompile#SetCompilerTemplate, and return a detected compiler command if detected, which will be used as the compiling command by SingleCompile, or returns 0 if the compiler is not detected. Thus, it is more powerful to detect some compilers. If the seventh parameter is omitted, the function will use a built-in default compiler detecting function instead. The default function would check whether the "command" is in PATH, ~/bin, /usr/local/bin, /usr/bin, /bin on UNIX and whether it is in PATH on other OSes, and returns the full path of the command if it is not in PATH. If the command is not detected, the default function would return 0. Here is a short example excerpted from built-in template(OpenWatcom detecting function): > function! s:DetectWatcom(compiling_command) let l:watcom_command = \SingleCompile#DetectCompilerGenerally(a:compiling_command) if l:watcom_command != 0 return l:watcom_command endif if $WATCOM != '' return $WATCOM.'\binnt\'.a:compiling_command endif endfunction < SingleCompile#DetectCompilerGenerally is the default compiler detecting function introduced in the above paragraph. This function first uses a general way to detect the compiler. If the general way can not detect it, it check the environment varible "$WATCOM" to get the compiler's installation directory and get the full path of the compiling program. *SingleCompile-predo-postdo* *SingleCompile-predo* *SingleCompile-postdo* *SingleCompile#SetPredo* *SingleCompile#SetPostdo* "Predo" and "Postdo" features allow you to initialize the compiler before compiling and clean up after compiling in you own way. "Predo" feature allows you to define a function, which would be called before compiling by SingleCompile, all by yourself. In the same way, "Postdo" feature allows you to define a function called by SingleCompile after compiling. Your "Predo" or "Postdo" function should accept one parameter, which would be passed in a dictionary containing compiling information, and return a new compiling information modified in the function by you. SingleCompile will use the new compiling information in its following work. The dictionary passed in is like this: > {"command": "the-compiling-command", "args": "the-compiling-argument"} > Then modify the dictionary to meet your need and return the modified dictionary. If you don't want to modify the dictionary, please return the parameter passed in directly. The two functions below provide a way to set the "Predo" and "Postdo" functions: > call SingleCompile#SetPredo('filetype', 'compiler', \function('your_predo_function')) call SingleCompile#SetPostdo('filetype', 'compiler', \function('your_postdo_function')) < Example: OpenWatcom's "Predo" and "Postdo" functions: > " pre-do function! s:PredoWatcom(compiling_info) let s:old_path = $PATH let $PATH = $WATCOM.s:GetPathSeperator().'binnt'.s:GetEnvSeperator(). \$WATCOM.s:GetPathSeperator().'binw'.s:GetEnvSeperator(). \$PATH return a:compiling_info endfunction " post-do function! s:PostdoWatcom(compiling_info) " watcom pre-do {{{2 let $PATH = s:old_path return a:compiling_info endfunction call SingleCompile#SetPredo('c', 'open-watcom', function('s:PredoWatcom')) call SingleCompile#SetPostdo('c', 'open-watcom', function('s:PostdoWatcom')) < As you see, the OpenWatcom "Predo" function first saves the current PATH environment varible, then modifies $PATH to meet the OpenWatcom compiler needs. It returns the original compiling info because it does not need to modify it. The OpenWatcom "Postdo" function restores the original $PATH. After defining the two functions, the example calls "SetPredo" and "SetPostdo" function to set the functions as the "Predo" function and "Postdo" function for corresponding language and compiler. To make it less confusing, I better explain the calling order here. The calling order is: first the compiler detecting function, then "Predo" function, then compile, and the last is the "Postdo" function. *SingleCompile-vim-compiler* *SingleCompile#SetVimCompiler* SingleCompile can work with the compiler feature of vim(see |:compiler|). To set the compiler file in the compiler direcotry for a compiler, use SingleCompile#SetVimCompiler function. For example, for g77, the GNU Fortran 77 compiler, use the following line to set the compiler file for g77: > call SingleCompile#SetVimCompiler('fortran', 'g77', 'fortran_g77') < (This line is excerpted from the built-in templates.) Then if we are using g77 as our compiler, SingleCompile will first execute ":compiler fortran_g77" before compiling the source file. This will give us the advantage that vim's quickfix will recognize the messages output by g77 and help us locate these errors quickly. *SingleCompile-priority* *SingleCompile#SetPriority* Since version 2.9, every compiler template could be assigned a priority value. This value determines which compiler to use when seversal compilers has been detected. Use the following line to set a compiler's priority: > call SingleCompile#SetPriority('language_name', 'compiler_name', priority) < The parameter "priority" is an integer. The smaller the parameter "priority" is, the higher priority the compiler has. For example, the following two lines set two Fortran compilers' priorities (The two lines are excerpted from the built-in template): > call SingleCompile#SetPriority('fortran', 'gfortran', 70) call SingleCompile#SetPriority('fortran', 'ifort', 80) < After executing the two lines above, if ifort (which is Intel Fortran Compiler) and gfortran (GNU fortran compiler) are both detected by SingleCompile, and the user does not call |SingleCompile#ChooseCompiler| to choose a compiler explicitly, SingleCompile will choose gfortran as the current compiler. CREDITS~ *SingleCompile-credits* ---------------------------------------------------------------------------- Marc Weber Integrated SingleCompile with vim-addon-actions, and some other improvements Darek Fixed a directory switching bug sky hi Provided DMD compiler for D language built-in template Zhou Yichao Made several improvements and fixed several bugs. TODO~ *SingleCompile-todo* ---------------------------------------------------------------------------- Add asynchronous compilation support. If "tee" is used when we are executing ":make" command, currently we can't get the exit code of the compiler. We need to fix this. When running compiled program, if "tee" is used for redirecting, things written to stdout are not printed as if what happens when stdout is a tty. This need to be fixed. Make it possible to store compiler template in config files, such as ini files. Reduce startup time and shrink memory use. vim:ts=4:ft=help:tw=78:et