win10环境下gvim离线配置插件的一些补充

0 总述

在上一篇博客,即《Windows系统下使用gvim配置LaTeX快速书写环境》一文中,本小白试图模仿神级人物Gilles Castel,打造vim下的 LaTeX \LaTeX LATEX书写环境。实话实说,东施效颦了。虽不至于一无所得,但也仅仅算开了个头。经过一段时间的摸索和查漏补缺,我深刻地认识到在之前博客中犯了一些错误。本文试图对于其中的一个错误进行修正。

1 究竟应该如何配置插件

上文书讲到,因为github受到墙的影响,导致我们无法按照vim-plug插件的官方指导方法,通过网络安装插件的方法直接完成插件配置。因此小白随意找了一个位置把插件配置了进去。虽然通过小白一通蹩脚的配置,确实勉强可以使用。但是不知道你有没有发现,按照那个配置方法,我们是无法查看到相关help或者其他doc文件的。这样给我们学习插件使用带了很大困扰。

从第一性原理出发,理论上,插件自动安装,也无非是通过程序将相应的文件安装配置在正确的位置。那么,插件的正确安装位置应该是哪里?

小白通过不间断地尝试,在github网络较好的时候,幸运地以自动化的方式安装成功了一个插件。于是我们查看到这个插件的安装位置实际上是在

shell 复制代码
C:\\Users\\XXXX\\vimfiles\\plugged

路径下。其中XXXX指的当然就是你的用户名了。

小白查阅了一些资料,原来,如果你在gvim中输入

shell 复制代码
:echo &HOME

注意冒号和大小写,这其实是在vim的普通模式下。

则系统会返回给你$HOME的路径,而这个路径下的vimfiles文件夹才应该是插件应该待的地方。

如果你和小白一样是windows10系统下默认安装的gvim,那么你将会看到

shell 复制代码
C:\Users\XXXX

如果你打开这个路径,发现没有plugged文件夹,那就顺手建一个,同样地,不要拼错单词。

注意把你下载的几个插件解压到这个plugged文件夹下面。

同时注意把它的版本号去掉。

然后又回到我们的_vimrc配置文件中,把之前强行指定的部分全都修改掉。

shell 复制代码
" Vim with all enhancements
source $VIMRUNTIME/vimrc_example.vim

" Use the internal diff if available.
" Otherwise use the special 'diffexpr' for Windows.
if &diffopt !~# 'internal'
  set diffexpr=MyDiff()
endif
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg1 = substitute(arg1, '!', '\!', 'g')
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg2 = substitute(arg2, '!', '\!', 'g')
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let arg3 = substitute(arg3, '!', '\!', 'g')
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      if empty(&shellxquote)
        let l:shxq_sav = ''
        set shellxquote&
      endif
      let cmd = '"' . $VIMRUNTIME . '\diff"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  let cmd = substitute(cmd, '!', '\!', 'g')
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
  if exists('l:shxq_sav')
    let &shellxquote=l:shxq_sav
  endif
endfunction

set shortmess=atI
set nu
set rnu
set guifont=Consolas:h9
set showmatch
colorscheme slate
syntax enable
syntax on
filetype indent on
filetype plugin indent on

call plug#begin()
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'lervag/vimtex'
call plug#end()

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsListSnippets="<c-tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
let g:UltiSnipsSnippetDirectories=['C:\Users\Admin\vimfiles\plugged\ultisnips']

"LaTeX配置
let g:tex_flavor='latex'
let g:vimtex_texcount_custom_arg=' -ch -total'
"映射VimtexCountWords!\lw 在命令模式下enter此命令可统计中英文字符的个数
au FileType tex map <buffer> <silent>  <leader>lw :VimtexCountWords!  <CR><CR>
let g:Tex_ViewRule_pdf = 'C:\Users\Admin\AppData\Local\SumatraPDF\SumatraPDF.exe -reuse-instance -inverse-search "gvim -c \":RemoteOpen +\%l \%f\""'

"这里是LaTeX编译引擎的设置,这里默认LaTeX编译方式为-pdf(pdfLaTeX),
"vimtex提供了magic comments来为文件设置编译方式
"例如,我在tex文件开头输入 % !TEX program = xelatex   即指定-xelatex (xelatex)编译文件
let g:vimtex_compiler_latexmk_engines = {
    \ '_'                : '-pdf',
    \ 'pdflatex'         : '-pdf',
    \ 'dvipdfex'         : '-pdfdvi',
    \ 'lualatex'         : '-lualatex',
    \ 'xelatex'          : '-xelatex',
    \ 'context (pdftex)' : '-pdf -pdflatex=texexec',
    \ 'context (luatex)' : '-pdf -pdflatex=context',
    \ 'context (xetex)'  : '-pdf -pdflatex=''texexec --xtx''',
    \}
"这里是设置latexmk工具的可选参数
let g:vimtex_compiler_latexmk = {
    \ 'build_dir' : '',
    \ 'callback' : 1,
    \ 'continuous' : 1,
    \ 'executable' : 'latexmk',
    \ 'hooks' : [],
    \ 'options' : [
    \   '-verbose',
    \   '-file-line-error',
    \   '-shell-escape',
    \   '-synctex=1',
    \   '-interaction=nonstopmode',
    \ ],
    \}

" 阅读器相关的配置 包含正反向查找功能 仅供参考
"let g:vimtex_view_method = 'general'
"let g:vimtex_view_general = {
	\ 'method': 'general',
	\ 'command': 'C:\Users\Admin\AppData\Local\SumatraPDF\SumatraPDF.exe',
	\ 'args': ['--reuse-instance', '--forward-search', '"%:p"', '%l', '--inverse-search', '"^"C:\Program Files\vim\vim91\gvim.exe^" -f % -c :call cursor(%line, %col)"'],
\}
"autocmd BufWritePost *.tex silent call vimtex#compiler#compile()
let g:vimtex_view_general_viewer = 'C:\\Users\\Admin\\AppData\\Local\\SumatraPDF\\SumatraPDF.exe' "这里放置你的sumatrapdf 安装路径
"let g:vimtex_view_general_options_latexmk = '-reuse-instance'
let g:vimtex_view_general_options
     \ = ' -reuse-instance -forward-search @tex @line @pdf'
     \ . ' -inverse-search "' . 'cmd /c start /min \"\" '  . exepath(v:progpath)
     \ . ' -v --not-a-term -T dumb -c  \"VimtexInverseSearch %l ''%f''\""' "for vim/gvim



"编译过程中忽略警告信息
let g:vimtex_quickfix_open_on_warning=1

let g:vimtex_quickfix_mode=0
set conceallevel=1
let g:tex_conceal='abdmg'

小白为了书写方便把整个文件都贴上来了,其实我们主要要关注的就是:

shell 复制代码
call plug#begin()
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'lervag/vimtex'
call plug#end()

另外就是其他一些涉及强行指定插件安装位置的语句,这些都可以不需要了。

2 如何在SumatraPDF中配置反向查看

小白尝试了很久,发现虽然_vimrc文件中的配置没有报错,但是一直没有啥效果。

需要在SumatraPDF 菜单栏中找到"设置" -> "选项"

在"设置反向搜索命令行""请输入您双击PDF文件后调用的命令行"里填写

shell 复制代码
cmd /c start /min "" "C:\Program Files\Vim\vim91\gvim.exe" -v --not-a-term -T dumb -c  "VimtexInverseSearch %l '%f'"

注意,如果你和小白一样,gvim是安装在C:\Program Files目录下,则由于空格的存在,一定要把路径地址用双引号包围起来,否则会报错,系统找不到C:\Program这个目录。

3 编译后在SumatraPDF中不刷新问题

这个问题困扰了小白很久,后来在vimtex的issue里找到了一些答案。按照issue里所说,其实这个问题很可能是由SumatraPDF本身导致的。小白尝试在两台电脑上安装,一台出现了这种问题,另一台没有。这个问题目前没有解决方案。vimtex的作者也说暂时不知道问题出在了何处,但是有一位用户提到,如果你在pdf文件中输入'r'键,则自动刷新后就得到了最新编译的pdf。

这个问题的相关解答可以参考# SumatraPDF doesn't auto-reload / refresh compiled PDF when using xelatex engine #2830

4 设置 continous编译模式后会出现stopped问题

在编译过程中,当小白第二次更新文件并编译时,却发现提示

shell 复制代码
compile stopped

小白本以为这是一个bug

后来也是查到了vimtex的issue,作者解释了这个问题,意思是这不是一个bug,是编译器的正常表现。

具体解释可以查看# Compiler running after Compilation completed #2131

shell 复制代码
:VimtexCompile            If the compiler supports and is set to run in
                          continuous mode, then this command works as
                          a compiler toggle. If not, this command will run
                          a single shot compilation.

小白暂时就发现和解决了这些疑惑。

剩余的事情还包括,要如何配置自己的snippets文件,以及如何使用那位神级小哥所说的inkscape工具快速绘图的问题。

路漫漫其修远兮,吾将上下而求索。

相关推荐
秋窗73 天前
Mac 部署Latex OCR并优化体验(打包成App并支持全局快捷键)
macos·ocr·latex
八一考研数学竞赛17 天前
第十七届全国大学生数学竞赛初赛模拟试题
学习·数学·latex·全国大学生数学竞赛
momo87022 天前
当你安装TeX Live 2025 却遇到中文用户名时。。。
latex
星夜钢琴手22 天前
缩小 IEEE 会议论文 LaTeX 模板标题、作者信息和正文的间距
latex·ieee conference
cnkeysky1 个月前
vscode 配置 latex
vscode·latex
磁悬浮青蛙呱呱呱1 个月前
xdvipdfmx:fatal: File ended prematurely. No output PDF file written.
latex
EtherWanderer1 个月前
Markdown 到 LaTeX:Overleaf 学习笔记
笔记·学习·latex
hallo-ooo1 个月前
【LaTex】基础语法入门
latex
伊织code1 个月前
LaTeX OCR - 数学公式识别系统
python·ai·ocr·latex·数学公式识别
Etincelle2 个月前
【LaTeX】Word插入LaTeX行间公式如何编号和对齐
word·wps·latex