1082 lines
42 KiB
Plaintext
1082 lines
42 KiB
Plaintext
*SingleCompile.txt*
|
|
|
|
File: SingleCompile.txt
|
|
Version: 2.12.0
|
|
Original Author and Current Maintainer: Hong Xu <hong@topbug.net>
|
|
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 <http://www.gnu.org/licenses/>.
|
|
|
|
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 <F9> :SCCompile<cr>
|
|
nmap <F10> :SCCompileRun<cr>
|
|
<
|
|
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|, <F10>:
|
|
>
|
|
nnoremap <F10> :call SingleCompileSplit() \| SCCompileRun<CR>
|
|
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 <F9> :SingleCompile<cr>
|
|
nmap <F10> :SingleCompileRun<cr>
|
|
<
|
|
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
|