Vim」カテゴリーアーカイブ

【解決済】vimtex 更新で vim + vimtex + latexmk + (p)latex + dvipdfm(x) 環境が壊れる問題

すぐに修正されると良いのだけれど・・・。

https://github.com/lervag/vimtex/commit/144e60649a0214b09ee78d3aeff4eb569daea194

のコミットで、vimtex から latexmk を使う場合に自動で -pdf オプションが付加されるようになりました。

platex + dvipdfmx の組み合わせは、日本語文書を作成に今もよくつかわれているので注意が必要。

とりあえず直したい、という場合には、vimtex がインストールされているディレクトリで、

$ git checkout 774e0309b1e4b30310ed8b5764cd131014148288

とする。これで、原因となっている変更前の状態に戻すことができる。
(ただし、git pull で最新にすることができなくなる。修正されたら、git で操作するか、インストールし直せば OK)

Issue を立ててみたので、どうなるか見守ってみる。

https://github.com/lervag/vimtex/issues/1142

これを機に LuaLaTeX 等に切り替えるべきなのかもしれない・・・。

6/22/2018  追記:

https://github.com/lervag/vimtex/commit/9d62a40af7bf141e0020cb264c202ee66830ce90

で修正されました。

https://github.com/lervag/vimtex/issues/1142

にある通り、以下を .vimrc に追加する。

let g:vimtex_compiler_latexmk_engines = { '_' : '-pdfdvi' }

【解決済】MSYS2 + gVim + vim-fugitive on Windows

vim-fugitive めっちゃ使いやすい。Vim のキラープラグインの1つではないかと思う。Windows での CUI 環境を MSYS2 に移行したくらいから、gVim で :GStatus が使えなくなって、CUI 版の Vim を使っていた。今回その理由に気づいたので、メモとして残しておく。

症状

元々の環境

症状

  • CUI からは、:Gstatus も動く
  • GUI からは、:Gstatus すると、/home から始まって、C: で終わる変なパスとともに、No such file or directory のエラーが表示される。

直し方だけ知りたい人は、解決策へ。 続きを読む

Vim の ft-tex-syntax で \reffig も \ref と同様にハイライトする方法

Vim で LaTeX を書く、とにかく書く、はい、書きましょう。

\ref は、\label で設定した章や図表の番号を参照するための LaTex コマンドです。例えば、図の場合、

Figure~\ref{fig:bird}

みたいに書くと参照できますが、

プリアンブル部(main.tex の \documentclass から \begin{document} までの間の部分)に、

\newcommand{\reffig}[1]{Figure~\ref{#1}}

とか書いておくと、

\reffig{fig:bird}

だけで上記の Figure~\ref{fig:bird} と書いた時と同じになったりするんですね。とまぁ、ここまでは知ってる人も使ってる人も多いと思います。

問題は、\reffig に対して、\ref で行われるようなシンタックス処理が行われないことなんです。例えば、ラベルに _(アンダースコア)を使った場合、LaTex では、アンダースコアは特別な意味を持っているので、エラーとして表示されてしまいます。そんなの気にならない、という人は、ここまで読んでそっとこのページを閉じてください。「あ、それ、気になってた!」という人は続きを読んでください。

先に結論を書くと、.vimrc の syntax on の後?に、

autocmd FileTYpe tex syntax region texRefZone matchgroup=texStatement
      \ start="\\ref\(fig\|tab\|sec\|eqn\|chap\|alg\){"
      \ end="}\|%stopzone\>"
      \ contains=@texRefGroup

と書くと、reffig, reftab, refsec, refeqn, refchap, refalg が、ref と同じようにシンタックス処理されるようになります。別のファイルに書く方法もありますが、設定ファイルを増やしたくない場合はこれがおすすめです。

Vim ft-tex-syntax の設定

Vim を使って LaTeX 文章を書く、これがルーティーンという人のためのポスト。

さて、今時の Vim で LaTeX 文書を開くと、高度な syntax 設定によってコマンドや環境の色付けはもちろん、数式($a$とか)や、文字装飾(\textbf{}など)が展開されて、解釈した結果のように見えるようになっています。そして、その行にカーソルがあるときには、入力された通りの文字列が表示されます。

これはこれでスゲー!ってな話ではあるんですが、書くときにはちょっと不便なこともあります。見た目と、実際に入力されている文字が一致していないので、カーソルをその行に持っていくと文字が移動するのはなんかめんどいのです。そもそも論的に、エディタで入力されている文字と表示されている文字が一致していないというのはいかがなものか、と思う人も多いでしょう。 続きを読む

【解決済】MacVim を CUI で動かすと has(‘mac’) が 0 になる問題

has(‘mac’) や has(‘macunix’) が 0 を返してしまって、.vimrc などが正しく挙動してくれなくなった。

調べると、以下のサイトが参考になった。

Detect OS in Vimscript

if !exists("g:os")
    if has("win64") || has("win32") || has("win16")
        let g:os = "Windows"
    else
        let g:os = substitute(system('uname'), '\n', '', '')
    endif
endif

みたいな感じで OS 情報を取得すればOK。

【解決済】Windows で vimtex 使ってたら main を見つけてくれなくなった話

vimtex いい。ところが、プラグインをアップデートしたら Windows 環境で main を見つけてくれなくなってしまった。それまではできていたはずなのに・・・

調べてみたら、以下のコミットが原因。
https://github.com/lervag/vimtex/commit/68e6e3b27a04b518d64a9d67c4d987cedf80ff85

let l:file = matchstr(l:line,
      \ '\v\\%(input|include|subimport\{[^\}]*\})\s*\{\zs\f+')

windows 環境下だと、isfname に { や } が含まれているので } が正規表現にマッチしてしまうのが理由。
正規表現の最後に } を書いてくれればそれで良いのだけど、調べてみると以下の記述を発見。

                                                           vimtex-faq-isfname
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
   vimtex.  Suggested solution is to remove {,} from isfname by:

  set isfname-={,}

ということで、 .vimrc に追記した。

"" lervag/vimtex
let g:vimtex_latexmk_continuous = 1
let g:vimtex_latexmk_background = 1
"let g:vimtex_latexmk_options = '-pdf'
let g:vimtex_latexmk_options = '-pdfdvi'
"let g:vimtex_latexmk_options = '-pdfps'
if (has('win32') || has('win64') || has('win32unix'))
  set isfname-={,}
  let g:vimtex_view_general_viewer = 'SumatraPDF'
  let g:vimtex_view_general_options
        \ = '-reuse-instance -forward-search @tex @line @pdf'
  let g:vimtex_view_general_options_latexmk = '-reuse-instance'
elseif (has('mac'))
  let g:vimtex_view_general_viewer
        \ = '/Applications/Skim.app/Contents/SharedSupport/displayline'
  let g:vimtex_view_general_options = '-r @line @pdf @tex'

  " This adds a callback hook that updates Skim after compilation
  let g:vimtex_latexmk_callback_hooks = ['UpdateSkim']
  function! UpdateSkim(status)
    if !a:status | return | endif

    let l:out = b:vimtex.out()
    let l:tex = expand('%:p')
    let l:cmd = [g:vimtex_view_general_viewer, '-r']
    if !empty(system('pgrep Skim'))
      call extend(l:cmd, ['-g'])
    endif
    if has('nvim')
      call jobstart(l:cmd + [line('.'), l:out, l:tex])
    elseif has('job')
      call job_start(l:cmd + [line('.'), l:out, l:tex])
    else
      call system(join(l:cmd + [line('.'), shellescape(l:out), shellescape(l:tex)], ' '))
    endif
  endfunction
endif
if (!has('clientserver'))
  let g:vimtex_latexmk_callback = 0
endif

Windows の gVim で set shellslash してるときに editorconfig-vim を使うと設定のロードに失敗する話

editorconfig って、考え方がいいと思う。エディタ横断、協働を助ける。
プロジェクトに関わっている人がそれぞれの心地よい道具を使いながら、必要な部分を必要なだけすり合わせるというのが素晴らしい。

vimtex を使うためには set shellslash する必要があるんだけど、すると editorconfig-vim をロードするときにエラーが出る。
いろいろ調べた結果、editorconfig-vim\plugin\editorconfig.vim が原因だった。
現状は以下のようにするとエラーを回避することができる。

function! s:UseConfigFiles_Python_External() " {{{2
" Use external python interp to run the python EditorConfig Core

""" I added from HERE """
if has('win32') && empty(matchstr(&shell, 'sh'))
let l:old_shellslash = &l:shellslash
setlocal noshellslash
endif
""" I added to HERE """

let l:cmd = shellescape(s:editorconfig_python_interp) . ' ' .
\ shellescape(s:editorconfig_core_py_dir . '/main.py')

""" I added from HERE """
" restore 'shellslash'
if exists('l:old_shellslash')
let &l:shellslash = l:old_shellslash
endif
""" I added to HERE """

call s:SpawnExternalParser(l:cmd)

return 0
endfunction