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工具快速绘图的问题。

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

相关推荐
诸神缄默不语8 小时前
LaTeX中的\pdfoutput命令:输出PDF
pdf·latex·\pdfoutput·pdflatex
hu_shidong18 天前
LaTeX参考文献工具和宏包bibmap项目简介
latex·参考文献·bibmap·宏包·后端程序
阿史大杯茶25 天前
用LaTeX写一篇帅帅的算法学习题解
学习·算法·latex
ejinxian1 个月前
LaTeX 编辑器-TeXstudio
编辑器·latex·texstudio·texmaker
RS_数模加油站2 个月前
【研赛论文】数学建模2024华为杯论文word/latex模板
数学建模·word·latex·华为杯
孙悟空间2 个月前
国产 LateX 线上平台 LoongTeX 推荐
latex·loongtex
Gu_fcsdn2 个月前
Python将Latex公式插入到Word中
python·word·latex·latex2word
HelloWorld__来都来了3 个月前
【问题记录+总结】VS Code & Tex Live 2024 & Latex Workshop & Springer模板----更新ing
vscode·latex·template method·tex studio
Misnearch3 个月前
overleaf上latex表格的使用,latex绘制三线表
latex·论文写作·overleaf