tex_seven.txt For Vim version 7.5 Last change: February 9, 2023 TeX-7 A semi-automatic, minimalistic LaTeX ftplugin that does not get in your way! Author: Óscar Pereira Email: See https://randomwalk.eu/contact License: GPL TeX-7 is an ftplugin that aims to enhance the writing experience of high quality documents with LaTeX and Vim. The goal of TeX-7 is to be simple and Vimish, meaning that focus is on carefully thought-out key mappings and features that are already present in a typical Vim installation. If you need to write a thesis or research articles and insist on having only one editor for all editing tasks, then TeX-7 is for you! The main features of TeX-7 are: * Powerful text-object for LaTeX environments; * Omni-completion of BibTeX database entries and label references; * Omni-completion of mathematical symbols, and included files; * Preview of BibTeX database entries and label references; * Preview of \includegraphics (supported formats: JPG, PNG, or PDF); * Filetype specific indentation (courtesy of Johannes Tanzler); * No-hassle settings, relatively few mappings; * Supports distraction-free LaTeX "small compile", done when saving. Shoutouts & thanks * Elias Toivanen, the original author of the TeX-9 plugin. ============================================================================== Table of Contents tex_seven-toc 1. Installation tex_seven-installation 2. Basics tex_seven-basics 2.1 Insert Mode tex_seven-basics-insert_mode 2.1 Normal Mode tex_seven-basics-normal_mode 2.1 Visual Mode tex_seven-basics-visual_mode 3. Compilation and Multi-file tex_seven-compile-mfile 3.1 Compilation tex_seven-compile 3.2 Multi-file Projects tex_seven-mfile 4. Jumping tex_seven-jumping 4.1 Citations tex_seven-jumping-citations 4.2 Labels and References tex_seven-jumping-label_refs 4.3 Includes tex_seven-jumping-includes 4.4 Graphics tex_seven-jumping-graphics 5. Completion tex_seven-completion 5.1 Omni-Completion tex_seven-completion-omni 5.2 Math-Completion tex_seven-completion-math 6. Mappings tex_seven-mappings 6.1 Insert Mode tex_seven-mappings-insert_mode 6.2 Normal Mode tex_seven-mappings-normal_mode 6.2 Visual Mode tex_seven-mappings-visual_mode 7. Tips and tricks tex_seven-tips 7.1 Override, extend and hack TeX-7 tex_seven-tips-hack_extend 7.2 Custom environment list/templates tex_seven-tips-custom_envs 7.3 Spell checking tex_seven-tips-spell_check 7.4 Pedantic Styling tex_seven-tips-pedantic_styling ============================================================================== 1. Installation tex_seven-installation To install TeX-7, I will assume you are a good citizen, and use something like Tim Pope's Pathogen plugin, or something to that effect. In the case of Pathogen, just clone this plugin into the bundle directory, usually ~/.vim/bundle, and run :Helptags afterwords. Next, open up vimrc and ensure it contains the following line: filetype plugin indent on Strictly speaking, for basic usage you don't need to configure anything else. However, you may find the following settings very useful in making TeX-7 more convenient to use. compiler_cmd : Array of Strings * Command used to compile LaTeX sources (see example below). * Default: empty. compiler_cmd_double : Array of Strings * Command to do two compilations. * Default: empty (but see tex_seven-compile). disable: Boolean * TeX-7 is disabled temporarily. * Default: 0 (TeX-7 is loaded). diamond_tex: Boolean * TeX-9 originally mapped <LocalLeader>< to \leq, and <LocalLeader>> to \geq. However, I find these LaTeX commands actually easy to type, to I prefer to map <LocalLeader>< to \langle\rangle, and <LocalLeader>> to <> (sometimes called diamond). Among other things, the latter is useful when writing Beamer templates. * Default: 1 (map <LocalLeader>> to <> and <LocalLeader>< to * \(lr)angle). label_retrieval_use_script: Boolean * Set whether \label retrieval will be done using vimscript only, or using an external Perl script (see below for requirements). * Default: 0 (retrieves \label's using vimscript only). leader: String * Most TeX-7 mappings begin with this prefix. * Optional. * Default: ','. viewer: String * Application used for viewing PDF files. * Optional. * Default: empty. viewer_images: String * Application used for viewing JPG/PNG files. * Optional. * Default: empty. You set these, er, settings, by defining a Dictionary called g:tex_seven_config in your vimrc (or better yet, in $VIMRUNTIME/ftplugin/tex.vim). In this latter file, you can add any settings that are not overrides of things defined by TeX-7. (For such overrides, use the after/ directory; cf. tex_seven-tips.) Example: let g:tex_seven_config = { \ 'compiler_cmd' : [ "/bin/bash", "CompileTeX.sh" ], \ 'label_retrieval_use_script' : 1, \ 'viewer' : 'okular' , \ 'viewer_images' : 'gwenview' } IMPORTANT #1: Do NOT set this Dictionary in $VIMRUNTIME/after/ftplugin/tex.vim. This file is only sourced after TeX-7 has ran, and thus if you set, say, a custom LocalLeader, all of the mappings will be set using the predefined value of LocalLeader. IMPORTANT #2: If you put any custom settings in either $VIMRUNTIME/ftplugin/tex.vim or $VIMRUNTIME/after/ftplugin/tex.vim, then you are highly encouraged to ensure that neither of them are sourced more than once. One way is to defined a sort of "include guards", like these: " Put this at the start of $VIMRUNTIME/ftplugin/tex.vim. if exists('b:ftplugin_tex_init') finish endif let b:ftplugin_tex_init = 1 " And this at the start of $VIMRUNTIME/after/ftplugin/tex.vim. if exists('b:after_ftplugin_tex_init') finish endif let b:after_ftplugin_tex_init = 1 IMPORTANT #3: To use the Perl script for \label retrieval, the perl-json module is required (in addition to Perl itself). ============================================================================== 2. Basics tex_seven-basics TeX-7 defines various mappings that speed up typesetting LaTeX code. Most of the mappings are prefixed with maplocalleader, referred below with the symbol <LocalLeader>. If you have set "g:tex_seven_config.leader", the corresponding character is used. Otherwise, it defaults to comma (,). Especially for multi-file projects, it is recommended to launch "(g)vim" from the same folder where the main ".tex" file is located. While most features should work fine even if you don't do this, it is the best strategy to avoid unforeseen problems with relative paths. Besides, it's the most natural thing to do anyway, so... Below is a short tutorial that should get you going in no time. 2.1 Insert mode tex_seven-basics-insert_mode To insert an environment, press <LocalLeader>B. You're prompted for an environment name, then the following is inserted: \begin{<envname>} | \end{<envname>} <envname> is the supplied environment name; the cursor is left where the | is. The list of environments comes from file ftplugin/environments.txt. This can be customised; cf. tex_seven-tips-custom_envs. Furthermore, by default the template for an environment is the one shown above, but it can be customised for specific environments. This is done in file ftplugin/environments.snippets. See the examples in that file, but the syntax is simple: the word following the "snippet" keyword must be the name of the environment to be customised. The other lines MUST start with a <Tab>, and contain the snippet to be inserted for that environment. Note that NO EMPTY lines are allowed, for otherwise it would not be possible to detect where a snippet ended. This list of templates can also be customised; again, cf. tex_seven-tips-custom_envs. The template code can contain indented lines, with tabs or spaces; upon insertion, the :retab command is executed (only over the newly inserted lines). Lastly, I should point out that, even though this feature was developed with LaTeX environments in mind, there is nothing preventing its use for other constructs the user might use frequently. To insert a command, press "<LocalLeader><Space>" (sans quotes). "\cmd{arg}" is inserted (sans quotes), with the "cmd" part visually selected (select-mode, not visual-mode). So just type the command name. Then just hit <Tab>, to move to the "arg" part, which will be left visually selected (idem.), for you to type over. After that, hitting <Tab> once more will move the cursor to the right of the now finished command (i.e., after the '}'), so you can continue to type your LaTeX document. Nested commands will also work, but in this scenario, the cursor will be left after the innermost '}'. For example, if you use this feature to insert "\footnote{\url{https://example.com}}", the cursor will be left after the '}' that closes the "\url" command. Note that both the mappings that set the <Tab> key behaviour described above, as well as the mappings for <Esc> and <C-c> described below, are local (i.e., for the current buffer only). And after finishing typing the command (i.e., after pressing <Tab> for the second time), they are either unset, or restored to their previous values. If you want to interrupt the command insertion for whatever reason, then pressing <Esc> or hitting <C-c>, will clear all local maps of the <Tab> key, restoring any previous mappings, if any (e.g. a mapping from a snippets plugin). The local mapping of the <Esc> key itself, that allows pressing it to unamp the <Tab> key, is itself cleared when pressing <Esc>. The same goes for <C-c>. So long story short, this works as you would expect, without surprises. And if for either the "cmd" part, or the "arg" part, you want to paste some text you have previously yanked/cut/etc, you can do that, by pressing <C-o>, which will take you to visual mode, where you can then hit p or P. Then you will be left in insert mode -- just if you had typed the text that you actually pasted -- from where you can just hit <Tab>, to continue normally. Moving on, type <LocalLeader>C to insert a citation, i.e. "\cite{citekey}". You're prompted with a popup list of completions if the \bibliography{} (or \addbibresources{}) statement contains a valid BibTeX file. Inserting references, "\ref{ref}", works in a similar way. The corresponding mapping is <LocalLeader>R. Here are a few other mappings that work similarly: * <LocalLeader>A inserts "\includeonly{}" and starts completion inside the brackets. * <LocalLeader>E inserts "\eqref{}" and starts completion inside the brackets. * <LocalLeader>Z inserts "\includegraphics{}" and starts completion inside the brackets. Supported graphic types: JPG, PDF, PNG. You can also some write, in the completion space, some string (say "foo"), and hit <LocalLeader>K. This will filter the original list of completions, to show you only those that contain the string "foo". See tex_seven-completion for more details. Before moving on, let's go back to <LocalLeader>C for a moment, It often happens that, when inserting a reference, you also want to indicate a specific location within it (e.g., a page number). This is done with an optional argument to the \cite command, e.g., \cite[p.\ 1]{foo}. But hitting <LocalLeader>C will leave you with \cite{foo|} (the | is the cursor). Not to worry: hit <LocalLeader>? (in insert or normal mode, no matter), and you will be left in insert mode, with the cursor at the proper place to insert a specific location: \cite[|]{foo}. Moving on, there are also some macros that work by double tapping a character on your keyboard (super convenient for subscripts and superscripts!). ^^ -> ^{} __ -> _{} ~~ -> \approx == -> &= Furthermore, pressing <LocalLeader>" inserts "LaTeX quotes", i.e., ``''. Also works for single quotes. And by defaut, hitting <LocalLeader> twice (i.e. <Localleader><Localleader>) inserts that character itself. E.g., if <LocalLeader> is set to comma (,) (the default without user config defined), then <Localleader><Localleader> inserts a literal comma in the text. There are plenty of other insert mode mappings; the ones described here are just the ones that required some explanation. See tex_seven-mappings-insert_mode. 2.2 Normal mode tex_seven-basics-normal_mode Typing <LocalLeader>V should open the document in the PDF viewer configured in "g:tex_seven_config" (see above). If you didn't set "g:tex_seven_config.viewer", an error message is shown. If you are using multi-file projects (see tex_seven-compile-mfile), then hitting <LocalLeader>gm will bring you back to the main .tex file (mnemonic: "go to main file"). To rename an enclosing environment, press <LocalLeader>R. You're prompted for a new environment name, and that gets replaced both in the \begin and \end lines of that enclosing environment. This works if the cursor is placed anywhere on the \begin line, anywhere on the \end line, or anywhere inside the environment (but not inside an inner nested environment, for in that case it is that inner environment's name that gets replaced). It also works when either the \begin or the \end statements are not at the start of their respective lines. To go from from a "\label{" or "\cite{" to its corresponding definition, place the cursor over them and hit either [gp] or [gd]: the first will open the corresponding "\ref{" or bib entry in a preview window (mnemonic: go preview), and the second in a new buffer (using :edit; mnemonic: go to definition). Note that in the case of a preview window, the cursor WILL MOVE to that window. To close it, hit :q, as usual. This functionality also works for things other than \label's and \cite's; see tex_seven-jumping. Typing <LocalLeader>B should move the cursor to the first line opening an environment ("\begin{"), that is above the current line (the line where the cursor is). Similarly, typing <LocalLeader>E should move the cursor to the first line ending an environment ("\end{"), that is below the current line. Both are super useful when used in combination with the mappings to select/yank/move/etc. entire environments, as described next. Especially in the case of nested environments, when the cursor is positioned at the innermost environment, but you want to select, say, the outermost. 2.3 Visual mode tex_seven-basics-visual_mode TeX-7 comes with a custom `environment operator' (see |text-objects|). Press 'vie' or 'vae' in normal normal to highlight the current inner environment (without the \begin and \end statements) or the outer environment respectively. Replace 'v' with another operator to achieve yanking, changing or deleting etc. For example, typing 'dae' makes it trivial to move figures and tables around in the document. Delete the environment, find a new location and paste it back on the buffer! Additionally, there are similar operators for inline math, i.e., math delimited by dollar signs ($). For example, if you have $x = 1$, then pressing 'vam' with the cursor anywhere in that inline math expression, will visually select all of it, including the delimiters. Hitting 'vim' does the same, but excludes the delimiters. And on for 'dam', 'dim', etc. And finally, given the ubiquity of curly (and even square) braces in LaTeX, there are operators these as well: 'ii'/'aa' for inner/outer curly braces, and 'is'/'as' for inner/outer square braces. So for example, 'vii' selects the content inside curly braces, while 'vas' selects the content inside square brackets, as well as the brackets themselves. ============================================================================== 3. Compilation and Multi-file tex_seven-compile-mfile 3.1 Compilation tex_seven-compile The last feature in the feature list at the beginning talks of a "small compile", meaning a one-time run of the LaTeX compilation program or script. Other compilation cycles, like a "full build" that also constructs the bibliography, are outside of the scope of the this plugin. This is because compilation of LaTeX files is very tricky to get right in all circumstances, and after all, Vim is not an IDE. Now, as any LaTeX user knows (and as novice users quickly find out), LaTeX's error messages can be notoriously hard to interpret correctly... and this might be putting it mildly! So what one usually does is save and build often, so that if any errors do occur, then the user likely can pinpoint the change that caused it. To aid in this task, this plugin defines a normal mode mapping :ww, that saves the current file, and does a small compile of the LaTeX project. So instead of writing (`:w`), the user can instead do a write-and-build, relatively seamlessly (`:ww`). This build is done in background, and if it succeeds, nothing more is said to the user, that can just continue to work. He is only notified if errors occur, so that he can go fix them, before writing any more. Moreover, it also happens with some frequency that two compile runs are required for some change to take effect (e.g. updates to the table of contents, \ref'rencing new \label's, etc.). For this, the plugin provides the normal mode mapping :w2. The command actually used is the one supplied by the compiler_cmd_double config option. If no such command is supplied, then the one in compiler_cmd is used twice. 3.2 Multi-file Projects tex_seven-mfile In order to work with LaTeX projects containing multiple files, each file other than the main one (the one containing the "\documentclass" line) must contain a modeline indicating the relative location of the main .tex file. E.g., if your main file is named main.tex, and it includes a file with relative path chapters/introduction.tex, then this file must contain a modeline similar to: % mainfile: ../main.tex The modeline must appear either on the three first lines of the file, or on the three last. Also note that the relative path must not contain spaces! ============================================================================== 4. Jumping tex_seven-jumping TeX-7 allows you to, for example, preview a bibliographic reference, by placing the cursor somewhere over the "\cite{...}" command, and hit [gp]: the corresponding BibTeX entry is then shown in a preview window. There are many other possibilities, besides bibliographic references. All of them are described in this section. Before that, an important note: all the features described here using [gp], also work with [gd], with the difference that in the latter case, no preview window is opened (i.e., :edit is used instead of :pedit). Also note that when using [gp], to close the preview window after having placed the cursor in some other window, there is no need to go back to the preview window. Just hit [gb], which is an alias to :pclose (mnemonic: Go Back to when there was no preview window opened). When using [gd], to go back hit CTRL-o. All in normal mode. Furthermore, [gf] is an alias to [gd]. See section tex_seven-jumping-includes below for the reason for this. 4.1 Citations tex_seven-jumping-citations If you have a citation like "\cite[some note]{key}", or "\nocite{key}", then placing the cursor *anywhere*, even outside of the "key" part, and pressing [gp] will open a preview window displaying the bib entry corresponding to that key. If you have a citation like "\cite{key1, key2}", or "\cite[some note]{key1, key2}", if you press [gp] when the cursor is over "key1", or "key2", then the corresponding bib entry will be shown. If the cursor is before the first key, e.g. over the "\cite{" string, then the entry for that first key is shown (in this case "key1"). If the cursor is inside the curly braces, but not over any key, then *the first preceding key* is used. In the example, if the cursor is at the comma or the space inside the curly brackets, "key1" is used. If the cursor is at the closing bracket '}', then "key2" is used. 4.2 Labels and References tex_seven-jumping-label_refs If you have a reference like "\ref{key}", or "\eqref{key}", then placing the cursor *anywhere*, even outside of the "key" part, and pressing [gp] will open a preview window showing the corresponding "\label{key}" statement. 4.3 Includes tex_seven-jumping-includes If you have a line like "\include{filename}", or "\includeonly{filename}", then placing the cursor *anywhere*, even outside of the "filename" part, and pressing [gp] will show the file named "filename" in the preview window. As stated above, [gf] is an alias to [gd]. The reason for this is that by default, hitting [gf] when the cursor is over a file name/path makes vim open that file in a new buffer (if the file exists). So to jump between files, I thought that the [gf] map might feel more natural (it does to me). Of course, this also means that you can use [gf] to, say, jump from a \ref to the corresponding \label. Use whatever shortcut suits you best! 4.4 Graphics tex_seven-jumping-graphics If you have a line like "\includegraphics{graphicfilename}", then placing the cursor *anywhere*, even outside of the "graphicfilename" part, and pressing [gd] or [gp] will open "graphicfilename" using the application configured in "g:tex_seven_config.viewer" for PDF files, and "g:tex_seven_config.viewer_images" for JPG or PNG files (see tex_seven-installation). If you didn't set "g:tex_seven_config.viewer", and/or "g:tex_seven_config.viewer_images", an error message is shown. ============================================================================== 5. Completion tex_seven-completion Say you have the following text in a .tex file: "\ref{|}", with the cursor being in the position of '|' (in insert mode). If you press <LocalLeader>K, vim will show you a popup, containing all keys corresponding to "\label{key}" statements found in the main .tex file, and any files \include'd therein, if any. Furthermore, if what is actually in your .tex file is something like: "\ref{sec:|}", then the popup will show only label keys that start with the prefix "sec:" (sans quotes). Pretty nice, right? This is called *completion*. What I described above is a part of so-called "omni-completion". The other is completion of math paraphernalia, creatively named "math-completion". Both are described in the following sections. Note that as in the example above, all completion scenarios described below always take place in insert mode. Also, | is used to denote the cursor's position. PERL SCRIPT FOR LABELS. Retrieval of \label statements, by default, is done using pure vimscript -- but the algorithm is rather naïve. For one thing, all the .tex files have to be parsed each time completion is triggered. This is fine for small documents, but for larger projects, it can be more convenient to use an external Perl script (this is done setting label_retrieval_use_script to 1, in the configuration dictionary). When this is set, when opening a file, the external script is launched in the background, to retrieve all \label statements, across all project .tex files. Thus, triggered completion will be a quicker process. (Recall that this external script requires that Perl be installed, together with the perl-json module, as stated in tex_seven-installation). 5.1 Omni-Completion tex_seven-completion-omni The above introduction already covers the case of omni-completion for "\ref{"; completion for "\eqref{" works in the same way. Completion for "\label{" is also done: it returns the list of existing \label's (i.e., it returns the same thing as for "\ref{" and "\eqref{"). The rationale for the omni-completion of \label statements is that one might want to create a new label using as a prefix the name of an existing label. For example, for sections inside chapters, I prefix the label of the section with the label of the chapter. This avoids label clashes for situations where, for instance, more than one chapter has a section named "Introduction". Completion for "\includeonly{" and "\includegraphics{" are similar, with the difference that what is returned are list of files \include'd in the main .tex file (if any), and graphic files, respectively. The graphic files are searched in the folder that contains the main .tex file, and any subfolders therein (but note that any files inside folders with names containing the string "build" are ignored). In all the cases described here, if there is a base text (e.g. the "sec:" in "\ref{sec:|}"), then only matches that contain that base string are returned, just as explained above. For example, suppose you hit <LocalLeader>A. "\includeonly{|}" gets inserted, and completion entries shown. If you then type "foo" (sans quotes), by default vim will show you the entries that START WITH "foo". But if you then hit <LocalLeader>K, TeX-7 will show you all the entries that CONTAIN the string "foo", even if not at the beginning. However, the text "foo" that you typed is deleted ( after all, the matching entries might not all *begin with* that string). And you can do this with more than one word! For example, if your write "\ref{foo bar|}" and then hit <LocalLeader>K, the enties shown will be only the ones that contain BOTH the string "foo" as well as the string "bar", though not necessarily in that order. Of course, you can use more than two strings (e.g., "\ref{foo bar baz|}" ). 5.2 Math-Completion tex_seven-completion-math Type <LocalLeader>M to get a popup list of different maths symbols, together with their shape (e.g. "\alpha" corresponds to α). I have (mostly) chosen to put on the completion list (~/.vim/autoload/tex_seven/omniMath.vim) symbols that have an Unicode representation, and can hence be "previewed" in this fashion. Furthermore, if there is a word to the left of the cursor, that word is used to filter the results of the popup list. For example, if you write "$x arrow|$" and press <LocalLeader>M, the popup list will contain all math symbols containing, but not necessarily starting with, the string "arrow". This also works if you write "\arrow". In both cases, you get a command, i.e., if you write "arrow" or "\arrow", hit <LocalLeader>M, and then select "rightarrow" from the completion popup, you get the command "\rightarrow". Additionally, the most frequently used maths symbols have their own shortcuts. Typing <LocalLeader>a expands to \alpha for example. Refer to tex_seven-mappings below for a complete listing. ============================================================================== 6. Mappings tex_seven-mappings As explained in tex_seven-basics, the symbol <LocalLeader> refers to the value of "g:tex_seven_config.leader", or if this is not set, to the value of maplocalleader. If this is also unset, then the default value is colon ':'. Furthermore, keep in mind that these mappings can be customised; see tex_seven-tips to see an example. 6.1 Insert Mode tex_seven-mappings-insert_mode In the mappings below, whenever completion is available (e.g. for \ref), it is started. Cf. tex_seven-completion for details. <LocalLeader><LocalLeader> <LocalLeader> <LocalLeader>' LaTeX's inverted single commas `' <LocalLeader>" LaTeX's inverted double commas ``'' <LocalLeader>? Go from \cite{foo|} to \cite[|]{foo} <LocalLeader>A Insert \includeonly{}, and start completion <LocalLeader>B Insert environment (prompts for a name) <LocalLeader>C Insert \cite{}, and start completion <LocalLeader>E Insert \eqref{} (equation reference), and start completion <LocalLeader>K Start regular (non-math) completion <LocalLeader>M Start math completion <LocalLeader>R Insert \ref{}, and start completion <LocalLeader>Z Insert \includegraphics{} reference Greek <LocalLeader>a \alpha <LocalLeader>b \beta <LocalLeader>c \chi <LocalLeader>d \delta <LocalLeader>e \epsilon <LocalLeader>f \phi <LocalLeader>g \gamma <LocalLeader>h \eta <LocalLeader>i \iota <LocalLeader>k \kappa <LocalLeader>l \lambda <LocalLeader>m \mu <LocalLeader>n \nu <LocalLeader>o \omega <LocalLeader>p \pi <LocalLeader>q \theta <LocalLeader>r \rho <LocalLeader>s \sigma <LocalLeader>t \tau <LocalLeader>u \upsilon <LocalLeader>w \varpi <LocalLeader>x \xi <LocalLeader>y \psi <LocalLeader>z \zeta <LocalLeader>D \Delta <LocalLeader>F \Phi <LocalLeader>G \Gamma <LocalLeader>L \Lambda <LocalLeader>O \Omega <LocalLeader>P \Pi <LocalLeader>Q \Theta <LocalLeader>U \Upsilon <LocalLeader>X \Xi <LocalLeader>Y \Psi <LocalLeader>_e \varepsilon <LocalLeader>_q \vartheta <LocalLeader>_r \varrho <LocalLeader>_s \varsigma <LocalLeader>_f \varphi Maths <LocalLeader>\ \setminus <LocalLeader>½ \sqrt{}<Left> <LocalLeader>N \nabla <LocalLeader>S \sum_{}^{}<Esc>2F{a <LocalLeader>_S \prod_{}^{}<Esc>2F{a <LocalLeader>V \vec{}<Left> <LocalLeader>I \int\limits_{}^{}<Esc>2F{a <LocalLeader>0 \emptyset <LocalLeader>_0 \varnothing <LocalLeader>6 \partial <LocalLeader>Q \infty <LocalLeader>/ \frac{}{}<Esc>2F{a <LocalLeader>\| \lor <LocalLeader>& \land <LocalLeader>\|\| \bigvee <LocalLeader>&& \bigwedge <LocalLeader>@ \circ <LocalLeader>* \not <LocalLeader>! \neq <LocalLeader>~ \neg <LocalLeader>= \equiv <LocalLeader>- \cap <LocalLeader>+ \cup <LocalLeader>-- \bigcap <LocalLeader>-+ \bigcup <LocalLeader>~ \widetilde{}<Left> <LocalLeader>^ \widehat{}<Left> <LocalLeader>_ \overline{}<Left> <LocalLeader><CR> \nonumber \\<CR> <LocalLeader>« \langle <LocalLeader>» \rangle <LocalLeader>( \left( \right)<Esc>F(la <LocalLeader>[ \left[ \right]<Esc>F[la <LocalLeader>{ \left\{ \right\}<Esc>F{la <LocalLeader>> <><Left> <LocalLeader>< \langle \rangle<Esc>F\hi The last two mappings above are as I prefer them. However, by setting the config flag "diamond_tex" to 0 (see tex_seven-installation), you can revert them to TeX-9's original mappings: <LocalLeader>< \leq <LocalLeader>> \geq 6.2 Normal Mode tex_seven-mappings-normal_mode See tex_seven-jumping for the details of the functionality provided by the mappings below. gb Go back from preview window (alias to :pclose) gd Go from \ref to the corresponding \label declaration, or similar gf Go to, say, an \include{file}, or similar gm Go back to main file gp Same as gd/gf, but show on a preview window, if applicable (obviously this does not apply when, say, displaying an image file) See tex_seven-basics-normal_mode for the details of the functionality provided by the mappings below. <LocalLeader>B Go to \begin above <LocalLeader>E Go to \end below <LocalLeader>R Rename environment <LocalLeader>V View the document :ww Do a small compile (see tex_seven-compile-mfile) :ww Do two small compiles (see tex_seven-compile-mfile) 6.3 Visual Mode tex_seven-mappings-visual_mode Besides the operator for selecting environments and inline mathematics (see tex_seven-basics-visual_mode), the following mappings allow you to quickly change the style of already existing text. vmap <buffer><expr> <LocalLeader>bf tex_seven#ChangeFontStyle('bf') vmap <buffer><expr> <LocalLeader>it tex_seven#ChangeFontStyle('it') vmap <buffer><expr> <LocalLeader>rm tex_seven#ChangeFontStyle('rm') vmap <buffer><expr> <LocalLeader>sf tex_seven#ChangeFontStyle('sf') vmap <buffer><expr> <LocalLeader>tt tex_seven#ChangeFontStyle('tt') vmap <buffer> <LocalLeader>up di\text{}<Left><C-R>" For example, to convert the word under the cursor to boldface, type: viw<Leader>bf To convert the current visual selectio to upright text, type: <Leader>up ============================================================================== 7. Tips and tricks tex_seven-tips 7.1 Override, extend and hack TeX-7 tex_seven-tips-hack_extend Create a custom tex.vim file in the after/ directory, i.e. ~/.vim/after/ftplugin/tex.vim. Here you can redefine mappings and extend TeX-7's functionality with your own ideas. If you come up with something sweet, kindly drop me a line :-) (email address available at link at the start of this file). Notice that to redefine mappings, you need need to set <LocalLeader> again. As an example, here is my ~/.vim/after/ftplugin/tex.vim: " First, reset <LocalLeader>. Note that this will run after TeX-7, and hence " the variable g:tex_seven_config.leader will be set. if exists('g:maplocalleader') let s:maplocalleader_saved = g:maplocalleader endif let g:maplocalleader = g:tex_seven_config.leader " Now, implement user's customisations. In this case, override of selected " TeX-7 mappings. inoremap <buffer> <LocalLeader>e \varepsilon inoremap <buffer> <LocalLeader>_e \epsilon inoremap <buffer> <LocalLeader>_0 \emptyset inoremap <buffer> <LocalLeader>0 \varnothing " I find this easier to insert environments in .tex files (something I do often). inoremap <buffer><silent> ;; <C-r>=tex_seven#environments#InsertEnvironment()<CR> inoremap <buffer> <LocalLeader>;; ;; " And lastly, revert <LocalLeader> to its previous setting, if any. if exists('s:maplocalleader_saved') let g:maplocalleader = s:maplocalleader_saved unlet s:maplocalleader_saved else unlet g:maplocalleader endif 7.2 Custom environment list/templates tex_seven-tips-custom_envs You can set a custom list of environment names for environment insertion (see tex_seven-basics). Copy the environment names file (ftplugin/environments.txt) to ~/.vim/after/ftplugin/ (see tex_seven-tips-hack_extend), and customise it to suit your needs. Then, in ~/.vim/after/ftplugin/tex.vim, insert: let b:env_list = fnameescape(expand('<sfile>:h') . '/environments.txt') Environment name completion will now use your name list, rather than TeX-7's default list. A similar trick can be used to add or customise environment templates. First, add the following to ~/.vim/after/ftplugin/tex.vim: let b:env_snippets = fnameescape(expand('<sfile>:h') . '/environments.snippets') Then just add your new snippet (or your modified version of an existing snippet) into file ~/.vim/after/ftplugin/environments.snippets. Do keep note of the difference: your local environments.txt file must contain the entire list of environment names that you want to use, whilst the environment.snippets file contains only added or modified environment templates -- but the ones in TeX-7's environment.snippets file are still available to use. If the same template (snippet) is found in both files, your local version is used -- indeed, this is how you modify an environment template. This is also to the user's advantage when updating TeX-7: on the one hand, the plugin's environment.txt file can be merged with your local version with a simple merge (after all, it is only one word lines); on the other hand, the plugin's environment.snippets file can be safely ignored: your customisations will still be used, but any new snippets the plugin's environment.snippets now provides will also be available. The user gets the best of both worlds. 7.3 Spell checking tex_seven-tips-spell_check If you've enabled 'modeline', you may conveniently activate spell checking (among other settings) in your LaTeX documents, like so (example for anglophones): % vim: spell spelllang=en Notice that newer versions of Vim provide an option let g:tex_comment_nospell=1 for disabling spell checking of comments that otherwise get messed up pretty badly. 7.4 Pedantic Styling tex_seven-tips-pedantic_styling Some people think that closing quotation marks, whether double or single, should always come AFTER any punctuation marks. However, this is annoying to do while is writing... Hence, the plugin provides the :SwapQuotesPunctuation command, that does, well, just that: replaces ''. with .'' (for dots, commas, colons, and question and exclamation marks). Then it replaces '. with .' (idem). Works even when the punctuation mark ends the line. ============================================================================== vim:tw=78:ts=8:ft=help:norl