vimtex/doc/latex.txt
Karl Yngve Lervåg fa87fbfe4e Clean up view.vim and updated docs
Also added okular to set of viewers
2015-01-29 13:37:38 +01:00

1250 lines
53 KiB
Plaintext

*latex.txt* LaTeX plugin for Vim version 7.3 (and above)
*vim-latex* *latex*
Author: Karl Yngve Lervåg <karl.yngve@gmail.com>
License: MIT license {{{
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
}}}
==============================================================================
CONTENTS *vim-latex-contents*
1. Intro ................................ |vim-latex-intro|
2. Main interface ....................... |vim-latex-main|
3. Default mappings ..................... |vim-latex-mappings|
4. Commands ............................. |vim-latex-commands|
5. Options .............................. |vim-latex-options|
6. Omni completion ...................... |vim-latex-completion|
7. Folding .............................. |vim-latex-folding|
8. Indentation .......................... |vim-latex-indent|
9. Latexmk .............................. |vim-latex-latexmk|
Latexmk tricks ....................... |vim-latex-latexmk-tricks|
10. View ................................. |vim-latex-view|
synctex .............................. |vim-latex-synctex|
11. Motion ............................... |vim-latex-motion|
12. Change ............................... |vim-latex-change|
13. Table of contents .................... |vim-latex-toc|
14. Utility functions .................... |vim-latex-util|
15. Function reference ................... |vim-latex-functions|
16. FAQ .................................. |vim-latex-faq|
17. Credits .............................. |vim-latex-credits|
18. Changelog ............................ |vim-latex-changelog|
==============================================================================
INTRO *vim-latex-intro*
This vim plugin provides some convenience functionality for editing LaTeX
documents. The goal has been to create a minimalistic and functional plugin
that is easy to customize and evolve. Most of the functionality provided is
turned on by default, but the user may turn off features that are not desired.
The plugin will hereafter be referred to as |vim-latex|.
*vim-latex-requirements*
Some of the functionalities of |vim-latex| has certain requirements:
|vim-latex-latexmk|
Requires that the user has installed both `latexmk` and `pgrep`. If these
are not available, then the functionalities provided by
|vim-latex-latexmk| will not be available.
|vim-latex-completion|
The function |latex#complete#bibtex| requires `bibtex` and `kpsewhich` to
parse bib files for bibliography completion.
==============================================================================
MAIN INTERFACE *vim-latex-main*
The |vim-latex| interface is based on the |autoload| feature of vim. For each
new latex buffer, the function *latex#init* initializes the variables and
functionalities based on the desired options |vim-latex-options|. The first
run performs some global initialization, which is mainly to define
autocommands. Other functionality is provided by additional autoloaded
scripts, such as |vim-latex-latexmk|. Every additional script should have an
initialization script that sets default mappings, creates autocommands and
performs other necessary initialization. This initialization script is then
called from |latex#init|.
The main interface provides some basic functionality. |latex#help| lists all
`vim-latex` mappings defined for the current buffer, by default mapped to
'<localleader>lh'. If the default mappings are used, |latex#help| will
display them. |latex#info| echoes the contents of |g:latex#data| and
|b:latex|. This is useful mainly for debugging. Finally, |latex#reinit|
clears the current data in |g:latex#data| and |b:latex|, stops running
`latexmk` processes |latex#latexmk#stop_all|, and then performs a new
initialization with |latex#init|.
For each latex project that is opened, a |Dictionary| is created and added to
the list |g:latex#data|. The dictionary is initialized with information tied
to the current project, mainly the different associated file names. In
addition, a dictionary is created for every buffer |b:latex|. This contains
data that is specific to the current buffer, most importantly it contains the
ID of the main latex project. This combination of local and global data
enables |vim-latex| to work properly for multi-file latex projects. It also
allows the editing of different latex projects simultaneously in different
buffers.
*g:latex#data*
A |List| of |Dictionaries|, each containing data specific to a given latex
project. The ID of a latex project is the index of its dictionary in the list.
An example of a dictionary is given here: >
{
'pid': 0,
'name': 'main',
'base': 'main.tex',
'root': '/some/path',
'tex': '/some/path/main.tex',
'aux': function('202'),
'log': function('203'),
'out': function('204'),
}
Which entries are present in a given dictionary depends on the current
settings. For example, the entry `pid` is only available if
|vim-latex-latexmk| is enabled |g:latex_latexmk_enabled|. Note that some of
the file entries are functions. The functions are used to find the files when
necessary, in case they do not exist when the latex file is opened. All
defined dictionaries can be printed with the function |latex#info|, by default
mapped to '<localleader>li'.
*b:latex*
For each buffer, |vim-latex| defines a |Dictionary| that contains buffer local
information. An example of such a dictionary is: >
{
'id': 0,
'fold_sections': [],
}
The most important entry is `id`, which is the index of the corresponding
entry in the list of latex projects |g:latex#data|. Other entries may also be
exist, such as `fold_sections`. The dictionary can be printed with the
function |latex#info|, by default mapped to '<localleader>li'.
Functions:
|latex#info|
|latex#help|
|latex#reinit|
------------------------------------------------------------------------------
Support for multi-file projects:~
*vim-latex-multi-file*
*tex-root*
|vim-latex| supports multi-file documents in the sense that the plugin
automatically detects the root file of the project. This detection is based
on a recursive search for files that include the current tex file, until
a main file is recognized. A file is assumed to be the main file if it has
the `\begin{document}` line. Files are assumed to live in the same folder or
a parent folder of the current file. This should work in most cases, but it
may fail if for instance the project structure is something like this: >
path1/main.tex
path2/chapter.tex
That is, the main file detection will not work for the file `chapter.tex`,
because the main file does not live in the same folder or a parent folder.
It is also possible to specify the main TeX file with a comment in one of the
first five lines of the current file similar to this: >
%! TEX root = my-main.tex
==============================================================================
DEFAULT MAPPINGS *vim-latex-mappings*
The default mappings for |vim-latex| are given below. See 'map-listing' for
an explanation of the format. The function |latex#help| is provided for
convenience to list all the defined mappings, and it is by default mapped to
'<localleader>lh'. The default mappings may be disabled with the option
|g:latex_mappings_enabled|, if the user wishes to create his/her own mappings.
n % *@:call latex#motion#find_matching_pair()<cr>
v % *@:<c-u>call latex#motion#find_matching_pair(1)<cr>
o % *@:normal v%<cr>
v a$ *@:<c-u>call latex#motion#select_inline_math()<cr>
v i$ *@:<c-u>call latex#motion#select_inline_math(1)<cr>
o a$ *@:normal va$<cr>
o i$ *@:normal vi$<cr>
v ae *@:<c-u>call latex#motion#select_environment()<cr>
v ie *@:<c-u>call latex#motion#select_environment(1)<cr>
o ae *@:normal vae<cr>
o ie *@:normal vie<cr>
v ad *@:<c-u>call latex#motion#select_delimiter()<cr>
v id *@:<c-u>call latex#motion#select_delimiter(1)<cr>
o ad *@:normal va(<cr>
o id *@:normal vi(<cr>
n [[ *@:call latex#motion#next_sec(0,1,0)<cr>
n [] *@:call latex#motion#next_sec(1,1,0)<cr>
n ][ *@:call latex#motion#next_sec(1,0,0)<cr>
n ]] *@:call latex#motion#next_sec(0,0,0)<cr>
v [[ *@:<c-u>call latex#motion#next_sec(0,1,1)<cr>
v [] *@:<c-u>call latex#motion#next_sec(1,1,1)<cr>
v ][ *@:<c-u>call latex#motion#next_sec(1,0,1)<cr>
v ]] *@:<c-u>call latex#motion#next_sec(0,0,1)<cr>
o [[ *@:normal v[[<cr>
o [] *@:normal v[]<cr>
o ][ *@:normal v][<cr>
o ]] *@:normal v]]<cr>
n <localleader>li *@:call latex#info()<cr>
n <localleader>lh *@:call latex#help()<cr>
n <localleader>lR *@:call latex#reinit()<cr>
n <localleader>lt *@:call latex#toc#open()<cr>
n <localleader>lT *@:call latex#toc#toggle()<cr>
n <localleader>ll *@:call latex#latexmk#toggle()<cr>
n <localleader>lk *@:call latex#latexmk#stop(1)<cr>
n <localleader>lK *@:call latex#latexmk#stop_all()<cr>
n <localleader>le *@:call latex#latexmk#errors(1)<cr>
n <localleader>lo *@:call latex#latexmk#output()<cr>
n <localleader>lg *@:call latex#latexmk#status()<cr>
n <localleader>lG *@:call latex#latexmk#status(1)<cr>
n <localleader>lc *@:call latex#latexmk#clean()<cr>
n <localleader>lC *@:call latex#latexmk#clean(1)<cr>
n <localleader>lv *@:call latex#view#view()<cr>
n <localleader>lr *@:call latex#view#rsearch()<cr>
n zx *@:call latex#fold#refresh()<cr>
n dse *@:call latex#change#env('')<cr>
n cse *@:call latex#change#env_prompt()<cr>
n dsc @ds}dF\
n csc *@:call latex#change#command()<cr>
n tse *@:call latex#change#toggle_env_star()<cr>
n tsd *@:call latex#change#toggle_delim()<cr>
n <F7> *@:call latex#change#to_command()<cr>i
i <F7> *@:call latex#change#to_command()<cr>
i ]] *@:call latex#change#close_environment()<cr>
==============================================================================
COMMANDS *vim-latex-commands*
|vim-latex| is mainly based on a function API as described in the section
|vim-latex-functions|. However, commands are also defined for convenience.
Below the commands are listed in alphabetical order.
*VimLatexClean* call latex#latexmk#clean(0)
*VimLatexClean!* call latex#latexmk#clean(1)
*VimLatexCompile* call latex#latexmk#compile()
*VimLatexCompileSS* call latex#latexmk#compile_singleshot(0)
*VimLatexCompileSS!* call latex#latexmk#compile_singleshot(1)
*VimLatexCompileToggle* call latex#latexmk#toggle()
*VimLatexErrors* call latex#latexmk#errors(1)
*VimLatexErrors!* call latex#latexmk#errors(0)
*VimLatexHelp* call latex#help()
*VimLatexInfo* call latex#info()
*VimLatexOutput* call latex#latexmk#output()
*VimLatexRefreshFolds* call latex#fold#refresh()
*VimLatexReinitialize* call latex#reinit()
*VimLatexStatus* call latex#latexmk#status(0)
*VimLatexStatus!* call latex#latexmk#status(1)
*VimLatexStop* call latex#latexmk#stop()
*VimLatexStopAll* call latex#latexmk#stop_all()
*VimLatexTocOpen* call latex#toc#open()
*VimLatexTocToggle* call latex#toc#toggle()
*VimLatexView* call latex#view#view()
*VimLatexRSearch* call latex#view#rsearch()
==============================================================================
OPTIONS *vim-latex-options*
This section describes the options for |vim-latex|. The options are first
listed in alphabetical order, before they are described in more detail. The
descriptions also list the default values.
Overview:~
|g:latex_enabled|
|g:latex_complete_close_braces|
|g:latex_complete_enabled|
|g:latex_complete_recursive_bib|
|g:latex_complete_patterns|
|g:latex_fold_enabled|
|g:latex_fold_automatic|
|g:latex_fold_envs|
|g:latex_fold_parts|
|g:latex_fold_preamble|
|g:latex_fold_sections|
|g:latex_indent_enabled|
|g:latex_latexmk_build_dir|
|g:latex_latexmk_callback|
|g:latex_latexmk_enabled|
|g:latex_latexmk_continuous|
|g:latex_latexmk_background|
|g:latex_latexmk_options|
|g:latex_mappings_enabled|
|g:latex_motion_enabled|
|g:latex_motion_matchparen|
|g:latex_quickfix_autojump|
|g:latex_quickfix_ignored_warnings|
|g:latex_quickfix_ignore_all_warnings|
|g:latex_quickfix_mode|
|g:latex_toc_enabled|
|g:latex_toc_fold_levels|
|g:latex_toc_fold|
|g:latex_toc_hide_help|
|g:latex_toc_hide_preamble|
|g:latex_toc_hide_line_numbers|
|g:latex_toc_numbers|
|g:latex_toc_numbers_width|
|g:latex_toc_resize|
|g:latex_toc_secnumdepth|
|g:latex_toc_split_pos|
|g:latex_toc_width|
|g:latex_view_enabled|
|g:latex_view_general_viewer|
|g:latex_view_general_options|
|g:latex_view_method|
|g:latex_view_mupdf_options|
|g:latex_view_okular_options|
|g:latex_view_sumatrapdf_options|
------------------------------------------------------------------------------
Detailed descriptions and default values:~
*g:latex_enabled*
If this variable exists and is 0, then |vim-latex| is completely disabled. By
default, it is not defined.
*g:latex_complete_close_braces*
When a label or a cite has been completed, this option controls whether it
will be followed by a closing brace. >
let g:latex_complete_close_braces = 0
<
*g:latex_complete_enabled*
Use this option to prevent the plugin from setting the 'omnifunc': >
let g:latex_complete_enabled = 1
<
*g:latex_complete_recursive_bib*
This option toggles recursive searching for bibliography files. Note that this
option may lead to a significant slowdown for large projects if enabled. >
let g:latex_complete_recursive_bib = 0
<
*g:latex_complete_patterns*
Define patterns that control when the label and citation completion is
triggered. >
let g:latex_complete_patterns = {
\ 'ref' : '\C\\v\?\(eq\|page\|[cC]\)\?ref\*\?\_\s*{[^{}]*',
\ 'bib' : '\C\\\a*cite\a*\*\?\(\[[^\]]*\]\)*\_\s*{[^{}]*',
\ })
<
*g:latex_fold_enabled*
Use this option to disable/enable folding. >
let g:latex_fold_enabled = 1
<
*g:latex_fold_automatic*
Set manual or automatic updating of fold levels. For manual mode, one must
use the |zx| mapping to update the foldlevels when desired. For automatic
mode, the fold levels will be updated automatically. Beware that this may
lead to some minor lags for large files. >
let g:latex_fold_automatic = 1
<
*g:latex_fold_envs*
Decide whether environments should be folded or not. >
let g:latex_fold_envs = 1
<
*g:latex_fold_parts*
List of parts that should be folded. >
let g:latex_fold_parts = [
\ "appendix",
\ "frontmatter",
\ "mainmatter",
\ "backmatter",
\ ]
<
*g:latex_fold_preamble*
Decide whether preamble should be folded or not. >
let g:latex_fold_preamble = 1
<
*g:latex_fold_sections*
List of section constructs that should be folded. >
let g:latex_fold_sections = [
\ "part",
\ "chapter",
\ "section",
\ "subsection",
\ "subsubsection",
\ ]
<
*g:latex_indent_enabled*
Use |vim-latex| indentation function. Not as customizable as the official
indentation function, but imho it is better. >
let g:latex_indent_enabled = 1
<
*g:latex_latexmk_build_dir*
Set this variable in case a dedicated build dir is used with `latexmk`/`latex`
compilations. >
let g:latex_latexmk_build_dir = '.'
<
*g:latex_latexmk_callback*
If enabled, this option tells `latexmk` to run |latex#latexmk#errors| after
compilation is finished. Note that this feature only works if vim is compiled
with the |+clientserver| option. >
let g:latex_latexmk_callback = 1
<
*g:latex_latexmk_enabled*
Whether to enable the `latexmk` interface or not. Note that even if it is not
enabled, the autoload functions will be available. However, the
necessary variables and autocommands will not be defined, and the mappings
will not be created. >
let g:latex_latexmk_enabled = 1
<
*g:latex_latexmk_background*
If continuous mode is disabled, then this option may be used to set
whether single compilations should be run in the foreground or the
background. >
let g:latex_latexmk_background = 0
<
*g:latex_latexmk_continuous*
If enabled, `latexmk` will run in continuous mode. This means that the
document is compiled every time a document file has been changed. Set to 0 to
disable. Note that the callback functions only work if continuous mode is enabled. >
let g:latex_latexmk_continuous = 1
<
*g:latex_latexmk_options*
Set desired options for `latexmk` compilation. Note that options may also be
specified indirectly through a `.latexmkrc` file. >
let g:latex_latexmk_options = '-pdf'
<
*g:latex_quickfix_autojump*
Whether to automatically jump to the first error whenever the |quickfix| window
is opened. >
let g:latex_latexmk_autojump = 0
<
*g:latex_quickfix_ignore_all_warnings*
If enabled, all LaTeX warnings are ignored and will not be listed in the
quickfix window. LaTeX errors will of course still be listed. >
let g:latex_quickfix_ignore_all_warnings = 0
<
*g:latex_quickfix_ignored_warnings*
List of warning messages that should be ignored. By default, the list is
empty, thus no warnings are ignored. The list is a list of strings. Any
LaTeX warning that contains a string in the list will be ignored. To ignore
some common LaTeX warnings, try the following setting: >
let g:latex_quickfix_ignored_warnings = [
\ 'Underfull',
\ 'Overfull',
\ 'specifier changed to',
\ ]
<
*g:latex_quickfix_mode*
This option controls the behaviour of the quickfix window in case errors
and/or warnings are found. The recognized options are:
Value Effect ~
0 The quickfix window is never opened automatically.
1 The quickfix window is opened automatically when there are errors,
and it becomes the active window.
2 The quickfix window is opened automatically when there are errors,
but it does not become the active window.
The default value is: >
let g:latex_quickfix_mode = 2
<
*g:latex_quickfix_open_on_warning*
If it is 0, then the quickfix window will only be opened on errors or when
it is forced open. >
let g:latex_quickfix_open_on_warning = 1
<
*g:latex_mappings_enabled*
Whether to load the default mappings. If this is set to 0, then no mappings
will be defined. Since all of the functionality is available as functions,
this allows the user to define his or her own mappings. >
let g:latex_mappings_enabled= 1
<
*g:latex_motion_enabled*
Whether to enable the motion interface. If it is disabled, then neither the
default mappings nor the autocommands that enable highlighting of matching
parens will be defined. >
let g:latex_motion_enabled = 1
<
*g:latex_motion_matchparen*
Enable highlighting of matching parens. This gives better support for LaTeX,
but disables the builtin |matchparen|. >
let g:latex_motion_matchparen = 1
<
*g:latex_toc_enabled*
Enable interface for TOC. If it is disabled, then mappings for the TOC will
not be created. >
let g:latex_toc_enabled = 1
<
*g:latex_toc_fold_levels*
If TOC entries are folded, this option controls the number of fold levels that
will be used. >
let g:latex_toc_fold_levels = 0
<
*g:latex_toc_fold*
Turn on folding of TOC entries. >
let g:latex_toc_fold = 0
<
*g:latex_toc_hide_help*
Allow the TOC help text to be hidden. >
let g:latex_toc_hide_help = 0
<
*g:latex_toc_hide_preamble*
If enabled, the start of the preamble is not shown in the TOC. >
let g:latex_toc_hide_preamble = 0
<
*g:latex_toc_hide_line_numbers*
If enabled, line numbers will be hidden in the TOC window. That is,
|nonumber| and |norelativenumber| will be set locally for the TOC window. >
let g:latex_toc_hide_line_numbers = 1
<
*g:latex_toc_numbers*
Toggle display of numbers in TOC. The numbers may also be toggled inside the
TOC window with the `s` keybinding. >
let g:latex_toc_numbers = 1
<
*g:latex_toc_numbers_width*
Set display width of numbers in TOC. If 0, the width is set based on the
section depth. >
let g:latex_toc_numbers_width = 0
<
*g:latex_toc_resize*
Automatically resize vim when the TOC window is opened. >
let g:latex_toc_resize = 1
<
*g:latex_toc_secnumdepth*
Define number of section levels to display. Set level corresponding to the
desired latex variable `secnumdepth`. Note that the variable may be updated
directly through the TOC window. For more info on `secnumdepth` see e.g.
http://en.wikibooks.org/w/index.php?title=LaTeX/Document_Structure >
let g:latex_toc_secnumdepth = 3
<
*g:latex_toc_split_pos*
Define where the TOC window is opened. >
let g:latex_toc_split_pos = 'vert leftabove'
<
*g:latex_toc_width*
Set width of TOC window. >
let g:latex_toc_width = 30
<
*g:latex_view_enabled*
Enable interface for view functionality. >
let g:latex_view_enabled = 1
<
*g:latex_view_general_viewer*
Set general viewer. >
let g:latex_view_general_viewer = 'xdg-open'
<
*g:latex_view_method*
Set viewer method. If not set or set to `general`, it uses the general
viewer, see |g:latex_view_general_viewer|. >
let g:latex_view_method = ''
The currently available choices are: >
general
mupdf
okular
sumatrapdf
<
*g:latex_view_general_options*
*g:latex_view_mupdf_options*
*g:latex_view_okular_options*
*g:latex_view_sumatrapdf_options*
Set custom options for the given viewer. >
let g:latex_view_general_options = ''
let g:latex_view_mupdf_options = ''
let g:latex_view_okular_options = ''
let g:latex_view_sumatrapdf_options = ''
<
==============================================================================
OMNI COMPLETION *vim-latex-completion*
|vim-latex| provides an 'omnifunc' for omni completion, see |compl-omni| and
|latex#complete#omnifunc|. The function is enabled by default, but may be
disabled with |g:latex_complete_enabled|. Omni completion is accessible with
|i_CTRL-X_CTRL-O|.
The omni function completes labels and citations. The completion candidates
are gathered with the functions |latex#complete#labels| and
|latex#complete#bibtex|. If |g:latex_complete_close_braces| is set to 1, then
the completion includes closing braces.
Associated settings:
|g:latex_complete_enabled|
|g:latex_complete_patterns.ref|
|g:latex_complete_patterns.bib|
|g:latex_complete_close_braces|
|g:latex_complete_recursive_bib|
Functions:
|latex#complete#omnifunc|
|latex#complete#labels|
|latex#complete#bibtex|
------------------------------------------------------------------------------
Complete labels~
Label completion is triggered by '\ref{' commands as defined with
|g:latex_complete_patterns.ref|. The completion parses every relevant aux
file to gather the completion candidates. This is important to note, because
it means that the completion only works when the latex document has been
compiled.
As an example: >
\ref{sec:<CTRL-X><CTRL-O>
offers a list of all matching labels, with their associated value and page
number. The label completion matches:
1. labels: >
\ref{sec:<CTRL-X><CTRL-O>
< 2. numbers: >
\eqref{2<CTRL-X><CTRL-O>
< 3. labels and numbers together (separated by whitespace): >
\eqref{eq 2<CTRL-X><CTRL-O>
------------------------------------------------------------------------------
Complete citations~
Citation completion is triggered by '\cite{' commands as defined with
|g:latex_complete_patterns.bib|. The completion parses included bibliography
files (`*.bib`) and `thebibliography` environments to gather the completion
candidates.
As an example, assume that a bibliography file is included with the following
entry: >
@book { knuth1981,
author = "Donald E. Knuth",
title = "Seminumerical Algorithms",
publisher = "Addison-Wesley",
year = "1981" }
Then the bibliography key `knuth1981` will be completed with e.g.: >
\cite{Knuth 1981<CTRL-X><CTRL-O>
\cite{algo<CTRL-X><CTRL-O>
\cite{Don.*Knuth<CTRL-X><CTRL-O>
In particular, note that regular expressions (or vim patterns) can be used
after '\cite{' to search for candidates.
==============================================================================
FOLDING *vim-latex-folding*
|vim-latex| can fold texts according to LaTeX structure (part, chapter, section
and subsection). Folding is turned on by default, but it can be disabled if
desired |g:latex_fold_enabled|.
When folding is turned on and a latex document is opened, the document is
parsed once in order to define the highest fold level based on which parts
(such as frontmatter, backmatter, and appendix) and section types (chapter,
section, etc.) are present. If the document has been edited and a new fold
level is required (or has become redundant), then |latex#fold#refresh| can be
used to refresh the fold level settings. This function is mapped by default
to 'zx'.
Associated settings:
|g:latex_fold_enabled|
|g:latex_fold_automatic|
|g:latex_fold_preamble|
|g:latex_fold_parts|
|g:latex_fold_sections|
|g:latex_fold_envs|
Functions:
|latex#fold#level|
|latex#fold#text|
|latex#fold#refresh|
==============================================================================
INDENTATION *vim-latex-indent*
The official indentation function is pretty good and allows for some
customization. However, I am not quite satisfied, so I wrote my own
indentation function that is not customizable at all (at least for now), but
that I think is better. It is enabled by default, but may be disabled if
desired |g:latex_indent_enabled|.
Associated settings:
|g:latex_indent_enabled|
==============================================================================
LATEXMK *vim-latex-latexmk*
|vim-latex| provides a basic interface to `latexmk` for compilation. The
interface may be disabled with |g:latex_latexmk_enabled|. The default
mappings are: >
nnoremap <localleader>ll :call latex#latexmk#toggle()<cr>
nnoremap <localleader>lk :call latex#latexmk#stop()<cr>
nnoremap <localleader>lK :call latex#latexmk#stop_all()<cr>
nnoremap <localleader>le :call latex#latexmk#errors(1)<cr>
nnoremap <localleader>lo :call latex#latexmk#output()<cr>
nnoremap <localleader>lg :call latex#latexmk#status(0)<cr>
nnoremap <localleader>lG :call latex#latexmk#status(1)<cr>
nnoremap <localleader>lc :call latex#latexmk#clean(0)<cr>
nnoremap <localleader>lC :call latex#latexmk#clean(1)<cr>
Compilation is started with |latex#latexmk#compile| or may be toggled by
|latex#latexmk#toggle|. The default behaviour uses preview continuous mode of
`latexmk`, which may be disabled with |g:latex_latexmk_continuous|. If it is
disabled, then the option |g:latex_latexmk_background| may be used to decide
if single shot compilation should run in the foreground or the background.
Single shot compilation may always be issued with the function
|latex#latexmk#compile_singleshot|. This function ignores the
|g:latex_latexmk_background|` setting, though, and will by default hide the
output from the `latexmk` command. The function is available through the
command |VimLatexCompileSS|, and if desired one may create a custom mapping
such as >
nnoremap <localleader>ls :VimLatexCompileSS<cr>
A banged version of the command also exists, which will provide a more verbose
output.
If vim is compiled with the |+clientserver| option and if
|g:latex_latexmk_callback| is enabled, then compilation errors are parsed
automatically. This is done by utilizing the tricks explained in
|vim-latex-latexmk-tricks|. Note however that this only works for continuous
compilation mode.
To check for and view errors in the quickfix window, use
|latex#latexmk#errors|. To check if background compilation is running, use
|latex#latexmk#status|.
Associated settings:
|g:latex_latexmk_enabled|
|g:latex_latexmk_callback|
|g:latex_latexmk_autojump|
|g:latex_latexmk_continuous|
|g:latex_latexmk_background|
|g:latex_latexmk_options|
Functions:
|latex#latexmk#clean|
|latex#latexmk#compile|
|latex#latexmk#compile_singleshot|
|latex#latexmk#errors|
|latex#latexmk#output|
|latex#latexmk#status|
|latex#latexmk#stop|
|latex#latexmk#stop_all|
|latex#latexmk#toggle|
------------------------------------------------------------------------------
Latexmk tricks:~ *vim-latex-latexmk-tricks*
`latexmk` allows to set options through a configuration file
`$HOME/.latexmkrc`. A particular set of options are very convenient for
a good coupling between |vim-latex| and `latexmk`: `$..._cmd`, where `...`
refers to either `compiling`, `success`, or `failure`. These options can be
used to specify commands that are run by `latexmk` before and after
a compilation run. For instance, one may use these options: >
$compiling_cmd = "xdotool search --name \"%D\" " .
"set_window --name \"%D compiling...\"";
$success_cmd = "xdotool search --name \"%D\" " .
"set_window --name \"%D OK\"; " .
"gvim --remote-expr 'latex#latexmk#errors(0)'";
$failure_cmd = "xdotool search --name \"%D\" " .
"set_window --name \"%D FAILURE\"; " .
"gvim --remote-expr 'latex#latexmk#errors(0)'";
<
Here `xdotool` (http://www.semicomplete.com/projects/xdotool/) is used to
change the title of the pdf viewer during and after compilation. In addition,
|latex#latexmk#errors| is called through the |clientserver| after each run to
either open the quickfix window when there are errors/warnings, or to close the
quickfix window in case all errors/warnings are gone.
The latter trick is utilized in |vim-latex| to automatically run the callback
commands if vim has the option |+clientserver|, and if the option
|g:latex_latexmk_callback| is enabled. The command that is used by `latexmk`
is then on the following form: >
gvim --servername v:servername --remote-expr 'latex#latexmk#errors(0)'
This command is then appended to the existing `$success_cmd` and
`$failure_cmd`. Note that if the existing commands are not empty, then they
must end with a semicolon in order to allow |vim-latex| to append safely.
==============================================================================
VIEW *vim-latex-view*
|vim-latex| provides functions for viewing the compiled documents. A command
and a mapping is defined for the multipurpose `view` function, which calls the
chosen view method defined by |g:latex_view_method|.
Associated settings:
|g:latex_view_enabled|
|g:latex_view_general_viewer|
|g:latex_view_general_options|
|g:latex_view_method|
|g:latex_view_mupdf_options|
|g:latex_view_okular_options|
|g:latex_view_sumatrapdf_options|
Functions:
|latex#view#general|
|latex#view#mupdf|
|latex#view#mupdf_rsearch|
|latex#view#okular|
|latex#view#sumatrapdf|
------------------------------------------------------------------------------
SYNCTEX SUPPORT *vim-latex-synctex*
Synctex is a tool that enables synchronization of the text editor position and
the pdf viewer position. The tool may be used to add mappings in vim to go to
the current position in the compiled pdf document (forward search), and also
to go from a specific position in the pdf file to the corresponding position
in vim (inverse/backward search).
To make synctex work, one must enable synctex manually by adding the line >
$pdflatex = 'pdflatex -synctex=1 %O %S';
to `~/.latexmkrc`.
Forward search~
|vim-latex| currently supports forward search for a limited set of viewers.
The functionality is enabled by choosing the desired viewer with the
|g:latex_view_method| option. The currently supported viewers are:
* MuPDF
* SumatraPDF
* Okular
More viewers and functionality will be implemented in the future.
Backward search~
Backward or inverse search is typially set up inside the specific viewer
through an option named something like "inverse search command-line".
A standard value for the option is: >
gvim --remote-silent +%l "%f"
Backward search is unfortunately not supported by all pdf viewers. The
following is a list of viewers that to my knowledge should support backward
search:
* Okular
* SumatraPDF
* Evince (since version 2.91.3)
Note: Inverse search relies on the |clientserver| functionality of vim. Each
instance of vim runs its own server. The above mentioned standard value
implies the default server name, which might not be the actual name of
the server for the vim instance you are using.
Note: For backward search to work on windows, one must ensure that the folder
that contains `gVim.exe` is in your `%PATH%` environment variable.
MuPDF does not support inverse search. However, by the use of some semi ugly
hacks, we have implemented a command inside vim that simulates the
functionality. The command is |VimLatexRSearch|, and is by default mapped to
`<localleader>lr` if MuPDF is chosen as the viewer. The command will go to
the line in the tex project that corresponds to the FIRST line on the page
that is open in MuPDF.
For SumatraPDF one may set the inverse search setting from vim directly by
adding some command line options as shown below. The advantage of doing this
is that one may specify the vim server name explicitly, which means that the
backward search will also work as expected if one has several vim instances
running. To enable this, use the general viewer and: >
let g:latex_view_general_viewer='SumatraPDF '
\ . '-reuse-instance -inverse-search '
\ . '"gvim --servername '.v:servername.' --remote-send \"^<C-\^>^<C-n^>'
\ . ':drop \%f^<CR^>:\%l^<CR^>:normal\! zzzv^<CR^>'
\ . ':execute ''drop ''.fnameescape(''\%f'')^<CR^>'
\ . ':\%l^<CR^>:normal\! zzzv^<CR^>'
\ . ':call remote_foreground('''.v:servername.''')^<CR^>\""'
==============================================================================
MOTION *vim-latex-motion*
|vim-latex| provides some functions that can be used to give improved motions
and text objects. For instance, |vim-latex-motion| enables highlighting of
matching parens or tags (such as begin/end structures). The functionality is
enabled by default, but may be disabled if desired.
Associated settings:
|g:latex_motion_enabled|
|g:latex_motion_matchparen|
Functions:
|latex#motion#find_matching_pair|
|latex#motion#next_section|
|latex#motion#sel_delimiter|
|latex#motion#sel_environment|
|latex#motion#sel_inline_math|
==============================================================================
CHANGE *vim-latex-change*
|vim-latex| provides mappings that are inspired by `surround.vim`
(https://github.com/tpope/vim-surround). These mappings are:
`cse` - change surrounding environment
`dse` - delete surrounding environment
`csc` - change surrounding command
`dsc` - delete surrounding command
Note: This mappings is only available if `surround.vim` is also
available.
`tsd` - toggle delimiters (add/remove `\left` and `\right`)
`tse` - toggle starred environment
An environment that has been opened but not closed may be closed by the
mapping `]]`.
In addition, some functionality is provided to wrap the current selection.
This is not mapped to anything by default.
Functions:
|latex#change#command|
|latex#change#close_environment|
|latex#change#env|
|latex#change#env_prompt|
|latex#change#to_command|
|latex#change#toggle_delim|
|latex#change#toggle_env_star|
|latex#change#wrap_selection|
|latex#change#wrap_selection_prompt|
==============================================================================
UTILITY FUNCTIONS *vim-latex-util*
Several utility functions are available. Many of these are used as building
blocks for other functionalities, but are also available for users to add
additional functionality.
Functions:
|latex#util#convert_back|
|latex#util#get_delim|
|latex#util#get_env|
|latex#util#has_syntax|
|latex#util#in_comment|
|latex#util#kpsewhich|
|latex#util#tex2tree|
|latex#util#tree2tex|
==============================================================================
TABLE OF CONTENTS *vim-latex-toc*
|vim-latex| provides a table of contents (TOC) window that can be opened
|latex#toc#open| or toggled |latex#toc#toggle|. In the TOC, one can use
'<CR>' on a selected entry to navigate.
Associated settings:
|g:latex_toc_enabled|
|g:latex_toc_fold_levels|
|g:latex_toc_fold|
|g:latex_toc_hide_help|
|g:latex_toc_hide_preamble|
|g:latex_toc_hide_line_numbers|
|g:latex_toc_numbers|
|g:latex_toc_numbers_width|
|g:latex_toc_resize|
|g:latex_toc_secnumdepth|
|g:latex_toc_split_pos|
|g:latex_toc_width|
Functions:
|latex#toc#open|
|latex#toc#toggle|
==============================================================================
FUNCTION REFERENCE *vim-latex-functions*
The following is a reference of the available functions, sorted
alphabetically. First a short overview is given, then more detailed
descriptions follow.
Overview:~
|latex#change#command|
|latex#change#close_environment|
|latex#change#env|
|latex#change#env_prompt|
|latex#change#to_command|
|latex#change#toggle_delim|
|latex#change#toggle_env_star|
|latex#change#wrap_selection|
|latex#change#wrap_selection_prompt|
|latex#complete#omnifunc|
|latex#complete#labels|
|latex#complete#bibtex|
|latex#fold#level|
|latex#fold#text|
|latex#fold#refresh|
|latex#help|
|latex#info|
|latex#latexmk#clean|
|latex#latexmk#compile|
|latex#latexmk#compile_singleshot|
|latex#latexmk#errors|
|latex#latexmk#options|
|latex#latexmk#status|
|latex#latexmk#stop|
|latex#latexmk#stop_all|
|latex#latexmk#toggle|
|latex#motion#find_matching_pair|
|latex#motion#next_sec|
|latex#motion#sel_delimiter|
|latex#motion#sel_environment|
|latex#motion#sel_inline_math|
|latex#reinit|
|latex#toc#open|
|latex#toc#toggle|
|latex#util#convert_back|
|latex#util#get_delim|
|latex#util#get_env|
|latex#util#has_syntax|
|latex#util#in_comment|
|latex#util#kpsewhich|
|latex#util#tex2tree|
|latex#util#tree2tex|
|latex#view#view|
------------------------------------------------------------------------------
Detailed descriptions:~
*latex#change#command*
Change the current command name to one typed at a prompt.
*latex#change#close_environment*
Closes current delimiter or environment command. The function is only useful
when used as an insert mode command, since it returns the closing part of the
delimiter or environment.
*latex#change#env*
Change the current environment name to the one passed as an argument.
*latex#change#env_prompt*
Change the current environment name to one typed at a prompt.
*latex#change#to_command*
Turn word under cursor into command. This essentially prepends a backslash
and adds an opening brace. The function may be used both in an insert mode
mapping and in a normal mode mapping.
*latex#change#toggle_delim*
Toggle delimiters between `(` `)` and `\left(` `\right)` (and similar).
*latex#change#toggle_env_star*
Toggle star for the current environment.
*latex#change#wrap_selection*
Wrap the current selection within a supplied command.
*latex#change#wrap_selection_prompt*
Wrap the current selection within a command given at a prompt.
*latex#complete#omnifunc*
An 'omnifunc' for label and citation completion, see |vim-latex-completion|.
*latex#complete#labels*
Parses aux files to gather label candidates for completion.
*latex#complete#bibtex*
Parses included bibliography files and `thebibliography` environments to
gather candidates for completion.
*latex#fold#level*
Sets fold level for each line. 'foldexpr' |fold-expr|
*latex#fold#text*
Sets fold title text. 'foldtext'
*latex#fold#refresh*
Refreshes fold levels based on which parts and sections used in the current
file buffer. Also issues a |zx| call to update folds.
*latex#help*
Lists all mappings that are defined specifically for the current buffer. If
the default mappings are used, then |latex#help| will display them.
*latex#info*
Echoes the contents of |g:latex#data| and |b:latex|. This is useful mainly
for debugging.
*latex#latexmk#clean*
Clean up temporary files with `latexmk -c`. An optional argument may be
supplied to indicate that the `-C` flag should be used, which also cleans
output files. This will only be run if `latexmk` is not already running.
*latex#latexmk#compile*
Starts `latexmk -pvc ...` for the given buffer, if it is not already running.
*latex#latexmk#compile_singleshot*
Starts a single shot compile with `latexmk ...` for the given buffer (if it is
not already running).
*latex#latexmk#errors*
Parse the log file for errors and warnings. If any errors or warnings are
found, they are displayed in the quickfix window. The exact behaviour is
controlled through the different quickfix specific option:
|g:latex_quickfix_autojump|
|g:latex_quickfix_ignore_all_warnings|
|g:latex_quickfix_ignored_warnings|
|g:latex_quickfix_mode|
Note: The function takes one argument, which if nonzero will force open the
quickfix window if any errors are present. This is used in the normal mode
mapping.
*latex#latexmk#output*
Opens a new buffer that show the output from the `latexmk` command. To close
the buffer, one may simply type `q`.
*latex#latexmk#status*
Show if `latexmk` has been started for the current buffer. An optional
argument may be supplied, in which case the status for all buffers is shown.
*latex#latexmk#stop*
Stop the `latexmk` process running for the current buffer. An optional
argument may be given, in which case the function becomes verbose.
*latex#latexmk#stop_all*
Stops all running `latexmk` processes.
*latex#latexmk#toggle*
Toggle compilation. Calls |latex#latexmk#compile| if `latexmk` is not running
for the current file. Else it calls |latex#latexmk#stop|.
*latex#motion#find_matching_pair*
Finds a matching pair of parentheses or begin-end-tags. The functions is used
to find the pair closest to the current cursor position.
*latex#motion#next_sec*
A motion command function that moves to the next section. Used to redefine
the mappings for ']]', '[[', and similar.
*latex#motion#sel_delimiter*
A function that is used to create text objects for text contained within a set
of delimiters.
*latex#motion#sel_environment*
A function that is used to create text objects for environments.
*latex#motion#sel_inline_math*
A function that is used to create text objects for inline math structures.
*latex#reinit*
Clears the current global and local data in |g:latex#data| and |b:latex|,
stops running `latexmk` processes |latex#latexmk#stop_all|, and then performs
a new initialization.
*latex#toc#open*
Open the TOC window. If it is already open, then simply move the cursor to
the TOC window.
*latex#toc#toggle*
Toggle TOC window: If TOC window is open, then close it. If it is closed,
then open it (but do not move the cursor to the window).
*latex#util#convert_back*
Convert from stuff like `\IeC{\"u}` to corresponding unicode symbols.
*latex#util#get_delim*
Get surrounding delimiters (with position).
*latex#util#get_env*
Get surrounding environment. If optional argument supplied, the function also
returns the position (line and column number) of the begin and end structure.
*latex#util#has_syntax*
Checks if the given position (or current position) is within the given syntax
structure.
*latex#util#in_comment*
Checks if the given position (or current position) is within a comment.
*latex#util#kpsewhich*
Parse file with `kpsewhich`.
*latex#util#tex2tree*
Turn tex structure to a tree composed of lists. E.g. >
{ testing { tex2tree { } } } => [ "testing" , [ "tex2tree", []]]
<
*latex#util#tree2tex*
Turns a tree composed of lists into tex structure. E.g. >
[ "testing" , [ "tex2tree", []]] => { testing { tex2tree { } } }
<
*latex#view#view*
Open the output file with the default viewer |g:latex_view_method|.
==============================================================================
FAQ *vim-latex-faq*
Q: Vim throws error when jumping to file with |gf|.
A: This might be due to the |isfname| setting, which by default contains `{,}`
on windows. |isfname| is a global option, and can therefore not be set by
`vim-latex`. Suggested solution is to remove `{,}` from |isfname| by: >
set isfname-={,}
==============================================================================
CREDITS *vim-latex-credits*
|vim-latex| is developed by Karl Yngve Lervåg <karl.yngve@gmail.com>, and is
distributed under the MIT license. The project is available as a Git
repository: https://github.com/lervag/vim-latex.
|vim-latex| was developed from scratch, but much of the code has been based on
LaTeX-Box: https://github.com/LaTeX-Box-Team/LaTeX-Box. LaTeX-suite was also
an inspiration: http://vim-latex.sourceforge.net/.
The documentation of |vim-latex| is structured with inspiration from CtrlP
(https://github.com/kien/ctrlp.vim), simply because CtrlP has a very good
documentation.
==============================================================================
CHANGELOG *vim-latex-changelog*
The following changelog only logs important changes, such as changes that
break backwards compatibility. See the git log for the detailed changelog.
2014-12-07: Added more general view functionality~
Added new module for view functionality. This allows more complex view
functions (and commands), for instance to do forward (and possibly backwards)
searching through `synctex`. In the first version, I added forward search for
mupdf by use of the `synctex` command and `xdotools`.
The `g:latex_viewer` option has now been deprecated. Instead one should use
|g:latex_view_method| and |g:latex_view_general_viewer|.
Deprecated option:
*g:latex_viewer*
2014-06-13: Changed some option names~
Some |vim-latex| option names were changed in an attempt to make the names
more consistent. These options are listed here for reference:
*g:latex_errorformat_ignore_warnings*
*g:latex_errorformat_show_warnings*
*g:latex_latexmk_autojump*
*g:latex_latexmk_quickfix*
The new names are, respectively:
|g:latex_quickfix_ignored_warnings|
|g:latex_quickfix_ignore_all_warnings|
|g:latex_quickfix_autojump|
|g:latex_quickfix_mode|
2013-10-05: First public release~
==============================================================================
vim:tw=78:ts=8:ft=help:norl: