Vim Latex 的使用和配置技巧 (一)

在这篇文章里, 我将简单地介绍一下我用 vim 编辑 Latex的技巧, 以及一些相关的配置.

众所周知, Vim 是一个插件极其强大的编辑软件, 在 Mac 上, 它的安装方法是:

brew cask install macvim

brew的安装方法, 可以到brew 主页查看.

在这里, 我们假设所有读者都已经熟悉VIM的基本用法. 如果有兴趣了解, 可以参考下面的基本教程.

酷壳网简明 VIM 练级攻略

插件的管理器: vundle

为了配置 Latex, 我们需要安装一下相关的插件: vundle. 其链接为:
Vundle Github 网址
这是一个插件管理的插件, 有了它, 就可以轻松安装 Vim 的插件了.

  1. 安装 Vundle:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
  1. 配置
    新建一个用户的.vimrc文件, 并且将下面的代码复制进来:
set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
  1. 安装插件
    比如你要安装fugitive插件, 那么就在call vundle#begin()call vundle#end() 中间, 加上Plugin 'tpope/vim-fugitive'的命令, 然后保存文件, 并用:so % source 一下, 然后再:PluginInstall, 就可以自动安装插件了.

Vim-latex 插件

1. 安装

Vim-latex 插件是一个强大的Latex插件, 它的安装方法是:

将下面代码放在~/.vimrc 中:

Plugin 'vim-latex/vim-latex'
" REQUIRED. This makes vim invoke Latex-Suite when you open a tex file.
filetype plugin on
" IMPORTANT: win32 users will need to have 'shellslash' set so that latex
" can be called correctly.
set shellslash

" OPTIONAL: This enables automatic indentation as you type.
filetype indent on

" OPTIONAL: Starting with Vim 7, the filetype of empty .tex files defaults to
" 'plaintex' instead of 'tex', which results in vim-latex not being loaded.
" The following changes the default filetype back to 'tex':
let g:tex_flavor='latex'

注意, Plugin 'vim-latex/vim-latex'一定要在call vundle#begin()call vundle#end() 中间.

在 Vim中运行:

:source %
:PluginInstall

2. 配置: ~/.vim/ftplugin/tex.vim

这个文件以后就是你的用户配置文件. 所有的 tex 文档都会自动加载这里的命令.
~/.vim/ftplugin/tex.vim文件中, 加入下面的代码:

" this is mostly a matter of taste. but LaTeX looks good with just a bit
" of indentation.
set sw=2
" TIP: if you write your \label's as \label{fig:something}, then if you
" type in \ref{fig: and press <C-n> you will automatically cycle through
" all the figure labels. Very useful!
set iskeyword+=:

3. 安装和插入模板

当新建一个空白的tex文本之后, 可以运行:TTemplate来插入一个模板. 之后, 就会有一个模板列表出现, 选中相应的数字就可以插入.

你也可以自行配置模板的库文件. 比如, 在~/.vim/ftplugin/latex-suite/templates中, 可以存储几个 tex 文件, 这些文件都会出现在你的模板列表里. 而且, 你还可以自行定义一下模板的存储目录, 比如, 在tex.vim中, 输入

let g:Tex_CustomTemplateDirectory=‘你的模板目录’

然后, 这个目录下的所有文件, 也都将出现在模板列表中.

4. Latex-Suit 的宏命令

在 Latex-Suit 中, 一直会有一个 Place Holders 的东西, 默认为<++>, 比如, 当你用宏命令插入一个图片的环境时, 就会出现

\begin{figure}[<+htpb+>]
    \centering
    \includegraphics{<+file+>}
    \caption{<+caption text+>}
    \label{fig:<+label+>}
\end{figure}<++>

这些 Place Hoders, 就是你的光标所在的位置, 当你输入完这一个命令, 然后按<Ctrl-J>时, 光标就会跳到下一个 Place Holder 上, 这样你就可以大大减少摁向右键, 从而加快了速度, 提高了效率.

4.1 环境映射

4.1.1 插入环境映射
  1. <F5>
    比如, 你想插入
\begin{environment}
<++>
\end{environment}<++>

就简单地在 insert 模式下, 输入environment, 然后按下<F5>, 就 OK 了.

再比如, 在输入 theorem之后, 按一下<F5>, 默认就会有

\begin{theorem}
      \label{<++>}<++>
\end{theorem}<++>
  1. 用’三字母’法.
    什么是三字母法? 主要有下面几个规则:
  • All environment mappings begin with E
  • If the environment can be broken up into 2 distinct words, such as flushright (flush + right), then the next 2 letters are the first letters of the 2 words. Example:
    flushleft (_f_lush + _l_eft) ---> EFL
    flushright (_f_lush + _r_ight) ---> EFR
    minipage (_m_ini + _p_age) ---> EMP
  • If on the other hand, the environment name cannot be broken up into 2 distinct words, then the next 2 letters are the first 2 letters of the name of the environment. Example:
    equation (_eq_uation) ---> EEQ
    总而言之, 就是 E + 两个单词的首字母或者一个单词的前两个字母.
4.1.2 环境映射修改

如果你想把 equation 变成align, 那么应该怎么做呢? 有两个办法:

  1. 按一下<S-F5>, 然后输入align, 回车, 大功告成.
  2. vimtex的插件, 在 normal 的模式下, 输入cse, 然后输入 align, 回车.

vimtex的插件, 还可以快速修改下面的情况: 我想在alignalign*之间互换, 那么就在 normal 的模式下, 输入tse.

4.1.3 环境映射的配置

然而, 你想做一下更改, 可以在tex.vim中, 加入下面一行命令 :

let g:Tex_Env_theorem = "\\begin{theorem}\<CR><++>\<CR>\\end{theorem}"

那么, 就会变成:

\begin{theorem}
      <++>
\end{theorem}<++>

如果你想对诸如align*这样带星号或者其他特殊符号的做修改, 就需要用下面的命令:

let g:Tex_Env_{'align*'} =
         \ "\\begin{align*}\<CR><++> &= <++>\<CR>\\end{align*}<++>"

这样, 就会出现

\begin{align*}
     <++> &= <++>
 \end{align*}<++>

有的环境需要加标签, 比如, 你希望对于所有的 equation 环境, 都有像\label{eq:<++>}的标签, 那么可以用以下的命令:

let g:Tex_EnvLabelprefix_equation = "eq:"

这样一来, 就会有

\begin{equation}
      <++>
      \label{eq:<++>}
\end{equation}<++>

同样地, 对于以下几个, 也同样适用, 倍有奇效.
figure, table, theorem, definition, lemma, proposition, corollary, assumption, remark, equation, align and multline.
如果你什么也没输入, 在空格前按一下<F5>, 那么也会有一个默认的列表出现, 只要按一下序号, 就会出现相应的环境. 默认的列表是: 'equation,equation*,align,align*,enumerate,itemize,figure,table’. 你可以用

let g:Tex_PromptedEnvironments=‘你的列表’

来修改, 注意用逗号隔开.

4.2 命令映射

4.2.1 插入命令映射

如果你想得到\frac{<++>}{<++>}<++>, 就直接输入 frac. 然后按<F7>, 就可以了, 它的默认的配置命令是

let g:Tex_Com_frac = "\\frac{<++>}{<++>}<++>"

一般地, 当你随便输入一个东西(如word)时, 将会出现 \word{<++>}.

4.2.2 更换命令映射

如果你想把\word{something} 变成 \abcd{something}, 那么也有下面两种办法:

  1. 在 insert 或者 normal模式, 按<S-F7>.
  2. vimtex插件, 在 normal 模式, 输入csc.

4.3 字体映射

如果你想插入\textsf{<++>}<++>(命令: FSF), 那么就可以用下面的三字母法:

  1. first letter is always F (F for font)
  2. next 2 letters are the 2 letters describing the font.

所以在 insert模式, 输入 FEM, 就会有\emph{<++>}<++>.

4.4 章节映射

在 insert 模式, 输入SSE, 就会有\section{<++>}<++>. 一般地,

SPA for part
SCH for chapter
SSE for section
SSS for subsection
SS2 for subsubsection
SPG for paragraph
SSP for subparagraph

4.5 希腊字母映射

在 insert模式, 如果你想输入一个希腊字母, 那么就简单地用<Leader>a-<Leader>z来输入\alpha-\zeta. <Leader>键默认是

let g:Tex_Leader=‘`’

就是~上的那个键. 但是对于我自己来说, 这个键比较难摁到, 我将它修改为;, 这个命令是:

let g:Tex_Leader=';'

但是接下来, 因为网页上的说明依然是默认键, 我们还是以默认的键来说明.

另外, 还有大写的希腊字母:

`D = \Delta
`F = \Phi
`G = \Gamma
`Q = \Theta
`L = \Lambda
`X = \Xi
`Y = \Psi
`S = \Sigma
`U = \Upsilon
`W = \Omega

4.6 常用的其他映射

Latex-suit 还提供了一些其他的映射, 现列表于下:
在insert 模式下,

`^   Expands To   \Hat{<++>}<++>
`_   expands to   \bar{<++>}<++>
`6   expands to   \partial
`8   expands to   \infty
`/   expands to   \frac{<++>}{<++>}<++>
`%   expands to   \frac{<++>}{<++>}<++>
`@   expands to   \circ
`0   expands to   ^\circ
`=   expands to   \equiv
`\   expands to   \setminus
`.   expands to   \cdot
`*   expands to   \times
`&   expands to   \wedge
`-   expands to   \bigcap
`+   expands to   \bigcup
`(   expands to   \subset
`)   expands to   \supset
`<   expands to   \le
`>   expands to   \ge
`,   expands to   \nonumber
`~   expands to   \tilde{<++>}<++>
`;   expands to   \dot{<++>}<++>
`:   expands to   \ddot{<++>}<++>
`2   expands to   \sqrt{<++>}<++>
`|   expands to   \Big|
`I   expands to   \int_{<++>}^{<++>}<++>

在 visual 模式下,

`(  encloses selection in \left( and \right)
`[  encloses selection in \left[ and \right]
`{  encloses selection in \left\{ and \right\}
`$  encloses selection in $$ or \[ \] depending on characterwise or
                                      linewise selection

4.7 自定义映射

我们可以用IMAP()来自行定义一些映射 . 比如: 在tex.vim中, 加入

call IMAP('NOM', '\nomenclature{<++>}<++>', 'tex')

那么在 insert 模式下, 当你输入NOM时, 就会有\nomenclature{<++>}<++>. 注意如果用双引号, 就需要是

call IMAP('NOM', “\\nomenclature{<++>}<++>”, 'tex')

或者

call IMAP('EFE', "\\begin{figure}\<CR><++>\\end{figure}<++>", 'tex')

这里, IMAP中的I指的是 insert 模式. 最后tex指的是这个映射所应用的文件类型.

如果想移除某个命令, 可以用

call IUNMAP('FEM','tex')

来实现.


相关文章:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容