Changes

Jump to navigation Jump to search
3,839 bytes added ,  18:49, 28 November 2016
m
Fix another typo
This page is about editing ConTeXt source in Vim, gVim, MacVim, NeoVim, and other Vim clones.
The page describes the scripts available with Vim v8.0.0047 0055 or later.If you are using an older Vim7, you may copy see''Using the <tt>context.vim</tt> scripts from with an older Vim's distribution (https://github.com/vim/vim) under the <tt>runtime</tt> directory into correspondingfolders in your <tt>.vim</tt> folder (so, for example <tt>ftplugin/context.vim</tt> must be copied into<tt>~/.vim/ftplugin/context.vim</tt>).Everything should work, at least with Vim 7.4' below.
== Using ConTeXt in Vim ==
An alternative way to typeset a document is to use <tt>:make</tt>. Set the current working
directory to the directory of the current buffer, then execute <tt>:make</tt>:
:lcd /path/to/my/project
:make
If a <tt>Makefile</tt> exists in the working directory, it is used (see below for a sample Makefile).
If no Makefile is found, <tt>mtxrun</tt> will be invoked directly.
Note that <tt>:make</tt> always performs synchronous typesetting. Also, if there are
errors, the quickfix list is populated, but you have to open it manually with <tt>:copen</tt>.
It is recommended that you map the above commands. For example, you may add
nnoremap <silent> <leader>tt :<c-u>update<cr>:ConTeXt<cr>
to your <tt>.vimrc</tt>, or (better)
nnoremap <buffer> <silent> <leader>tt :<c-u>update<cr>:ConTeXt<cr>
to <tt>~/.vim/after/ftplugin/context.vim</tt>, after which pressing <tt>\tt</tt> (where <tt>\</tt> is your leader key)
Besides, when you are inside a MetaPost environment, you may press CTRL-X followed by CTRL-O
to complete a MetaPost/MetaFun keyword (see below for a list of several autocompletion plugins to streamline this).
This works out of the box: no configuration is required. Watch the asciicast above for a demo.
=== Integration with other languages ===
let g:context_include = { 'cpp' : 'CPP' }
The key is the name of the filetype and the corresponding value is name of the command.
 
=== Using the scripts with an older Vim ===
 
If you are using an older Vim, you may copy the following scripts from Vim's distribution
(https://github.com/vim/vim) into corresponding
folders in your <tt>.vim</tt> folder (so, for example <tt>runtime/ftplugin/context.vim</tt> must be copied into
<tt>~/.vim/ftplugin/context.vim</tt>):
 
runtime/autoload/context.vim
runtime/autoload/contextcomplete.vim
runtime/compiler/context.vim
runtime/ftplugin/{context,mf,mp}.vim
runtime/indent/{context,mf,mp}.vim
runtime/syntax/{context,mf,mp}.vim
 
If you get the following error when you open a ConTeXt or MetaPost document:
 
E410: Invalid :syntax subcommand: iskeyword
 
edit the syntax files and remove the <tt>syn iskeyword</tt> or <tt>syntax iskeyword</tt> line.
Instead, put a corresponding command in <tt>~/.vim/after/ftplugin/context.vim</tt>:
 
setlocal iskeyword=@,48-57,a-z,A-Z,192-255
 
and in <tt>~/.vim/after/ftplugin/mp.vim</tt> for MetaPost:
 
setlocal iskeyword=@,_
 
Everything should work, at least with Vim 7.4.
=== TODO ===
Currently no other formats are recognized.
* If you use ConTeXt most of the time, but occasionally use LaTeX or Plain TeX, you can add the following to your <tt>.vimrc</tt>
let g:tex_flavor = "context"
* If you only use ConTeXt, you can add the following lines to <tt>filetype.vim</tt>:
Use lowercase letters (<tt>en_us</tt>, not <tt>en_US</tt>). When you set <tt>spelllang</tt>, Vim offers to
download the language data into your <tt>.vim</tt> folder, if such language is not available.
You can put the above settings in your <tt>.vimrc</tt> if you like.
== Powerful key mappings ==
the prefix for user-defined mappings.
By default, the leader is the backslash character, but that may be changed by the user.
For example, to use a comma as a leader, put this in your <tt>.vimrc</tt>:
map <leader> ,
Rather than overriding the default leader, you may define an alternative key. The <tt><space></tt> is a good
choice, because by default it has the same function as the <tt><right></tt> key, and it is comfortable to type:
map <space> <leader> " Use <space> as an alternative leader (backslash can still be used)
 
=== Clean up auxiliary files ===
 
The following function can be used to clean up temporary files:
fun! ConTeXtClean()
let l:currdir = expand("%:p:h")
let l:tmpdirs = ['out'] " Temporary directories
let l:suffixes = ['aux', 'bbl', 'blg', 'fls', 'log', 'tuc'] " Suffixes of temporary files
for ff in glob(l:currdir . '/*.{' . join(l:suffixes, ',') . '}', 1, 1)
call delete(ff)
endfor
for dd in l:tmpdirs
let l:subdir = l:currdir . '/' . dd
if isdirectory(l:subdir)
for ff in glob(l:subdir . '/*.{' . join(l:suffixes, ',') . '}', 1, 1)
call delete(ff)
endfor
endif
call delete(l:subdir) " Delete directory (only if empty)
endfor
echomsg "Aux files removed"
endf
Customize <tt>l:tmpdirs</tt> and <tt>l:suffixes</tt> to suit your needs.
In Windows systems, you may have to replace each slash with a backslash, too.
 
The following mapping allows you to remove auxiliary files by pressing <tt>\tc</tt>:
nnoremap <silent><buffer> <leader>tc :<c-u>call ConTeXtClean()<cr>
 
=== Snippets ===
 
Vim allows you to define abbreviations for frequently used pieces of text (see <tt>:help abbreviations</tt>).
Here are a few examples:
<pre>
fun! Eatchar(pat) " See :help abbreviations
let c = nr2char(getchar(0))
return (c =~ a:pat) ? '' : c
endfun
 
iab <buffer> ch- \startchapter[title={<c-o>ma}]<cr><c-o>mb<cr>\stopchapter<esc>`a`b<c-o>a<c-r>=Eatchar('\s')<cr>
iab <buffer> s- \startsection[title={<c-o>ma}]<cr><c-o>mb<cr>\stopsection<esc>`a`b<c-o>a<c-r>=Eatchar('\s')<cr>
iab <buffer> ss- \startsubsection[title={<c-o>ma}]<cr><c-o>mb<cr>\stopsubsection<esc>`a`b<c-o>a<c-r>=Eatchar('\s')<cr>
iab <buffer> sss- \startsubsubsection[title={<c-o>ma}]<cr><c-o>mb<cr>\stopsubsubsection<esc>`a`b<c-o>a<c-r>=Eatchar('\s')<cr>
iab <buffer> slide- \startslide[title={<c-o>ma}]<cr><c-o>mb<cr>\stopslide<esc>`a`b<c-o>a<c-r>=Eatchar('\s')<cr>
iab <buffer> fig- \startplacefigure<cr><tab>\externalfigure[<c-o>ma]%<cr>[]<c-o>mb<cr><c-d>\stopplacefigure<esc>`a`b<c-o>a<c-r>=Eatchar('\s')<cr>
iab <buffer> item- \startitemize<cr><cr>\stopitemize<up><tab>\item
iab <buffer> enum- \startitemize[n]<cr><cr>\stopitemize<up><tab>\item
iab <buffer> i- \item
</pre>
 
Type the abbreviation followed by Space to expand the snippet, then continue typing normally.
 
Inside the definition of an abbreviation, marks may be set (see <tt>:h m</tt>), which allow you to jump between the different
parts of a snippet with TAB (CTRL-i) and CTRL-O (in Normal mode) after the abbreviation is expanded (see <tt>:h jump-motions</tt>).
For example, after typing <tt>ch- </tt>, the cursor will be at the title's position. If you press <tt><esc><tab></tt> (or
<tt><c-o><tab></tt> if you want to stay in Insert mode after the jump), you will jump between <tt>\startchapter</tt>
and <tt>\stopchapter</tt>.
=== Buffer-local Insert-mode macros to speed up editing ===
nnoremap <silent> ]q :<c-u><c-r>=v:count1<cr>cnext<cr>zz
nnoremap <silent> [q :<c-u><c-r>=v:count1<cr>cprevious<cr>zz
nnoremap <silent> ]Q :<c-u>clast<cr>zz
nnoremap <silent> [Q :<c-u>cfirst<cr>zz
Or install Tim Pope's <i>unimpaired</i> plugin.
rm *.aux *.bbl *.blg *.log *.tuc
If you put these mappings to your <code>.vimrc</code> file, you can then compile the document with F9 and preview it with F8:
" map ":make" to the F9 key
* SuperTab[https://github.com/ervandew/supertab]
The In the asciicast at the top of this page uses µcompletewas used.
=== Snippets UltiSnips ===
Vim allows you to define abbreviations for frequently used pieces of text (see <tt>:help abbreviations</tt>).If you need more sophisticated support for snippets of code, UltiSnips[https://github.com/SirVer/ultisnips]is the plugin to usea sophisticated snippets manager. Here are a few examples of useful UltiSnips snippets for ConTeXt:
snippet "s(tart)?" "start / stop" br
134

edits

Navigation menu