vimには多くのTexプラグインがあります(vim-latex、AutomaticLatexPluginをいくつか挙げます)。
これらのTeXプラグイン(私が名前を付けたものとおそらく他のもの)の間に提供される機能の違いは何ですか?
SOに関するいくつかの関連する質問を次に示します。
vimには多くのTexプラグインがあります(vim-latex、AutomaticLatexPluginをいくつか挙げます)。
これらのTeXプラグイン(私が名前を付けたものとおそらく他のもの)の間に提供される機能の違いは何ですか?
SOに関するいくつかの関連する質問を次に示します。
回答:
さまざまなプラグインの使用経験は限られているため、詳細な比較は行いません。私はいくつかのプラグイン(LaTeX-BoxおよびLaTeX-Suite)をよく知っています。また、自分で開発しているvimtexの 1つのプラグインをよく知っています。したがって、私は主にvimtexについて書きます。しかし、私は最初に、他の人にとって興味深いかもしれないいくつかの参照を指摘します。
Vimには多くのプラグインがあります。これらは、少なくとも半人気があると私が認識したものです:
でtex.stackexchange.com、そこにある巨大なリスト LaTeXのエディタとIDEのは。一般的な概要を提供しますが、Vimのプラグインの概要も提供します。
vimtexはLaTeX-Boxに基づいています。しばらくの間、LaTeX-Boxのバグ修正と更新を提供した後に開始しました。プラグインをゼロから作成した場合、プラグインははるかに現代的な方法で作成できることに気付きました。最初にほとんどの機能を削除し、より堅牢でモジュール式の「エンジン」を構築しました。その後、機能を追加しましたが、今日はLaTeX-Boxのほとんどの機能があり、次にいくつかの機能があると思います。
機能の完全なリストを提供する代わりに(代わりにここを参照してください)、vimtexと他のプラグインの違いのいくつかを指摘しようと思います。ただし、私はいくつかの大胆な主張を提供したいと思います。
vimtexはLaTeX-Boxに基づいているため、明らかに同様の原則があります。アイデアは物事をシンプルに保ち、他のより良いプラグインではまだ解決されていない問題を解決することです。これは、利用latexmk LaTeX文書をコンパイルし、それが構文強調表示のための内部Vimのプラグイン上に構築されています。
vimtexに欠けているのLaTeX-ボックス内の1つの重要な特徴は、現在あり:シングルショットのコンパイルコールバックを持ちます。この機能がvimtexにないのは、単純に複雑であるためであり、自分の好みに合わせて簡単に実装できる方法を見つけられなかったためです(提案を歓迎します。 )。
vimtexとLaTeX-Suiteの主な違いは、おそらくvimtexがVim内にLaTeX用の本格的なIDEを実装しようとしないことです。例えば:
latexmk
、コンパイルエラーに関するインスタントフィードバックを取得するために、コールバック機能を使用してコンパイルに使用しますVim-LaTeXは私が使用した唯一のLaTeXプラグインであるため、比較することはできません。私はVim-LaTeXをほぼ1年間使用しています。そこで、Vim-LaTeXについてのみ説明します。
Vim-LaTeXには多くの機能があります。それらのすべてを覚えていません。私が知っていて、常に使用する機能についてお話します。
注:これらは私の限られたユーザーエクスペリエンスであり、誤解を招く可能性があります。私はベテランのVimユーザーではありません。そして、vimscriptについては何も知りません。
<C-j>
ジャンプIMAP()
関数と<C-j>
ジャンプ関数はimaps.vim
、Vim-LaTeXバンドルのプラグインとして個別に提供されます。これらは強力な機能であり、LaTeXを作成していない場合でも非常に便利です。
IMAP()
関数は、ビルトインimap
やiabbrev
IMO よりも挿入モードのマッピングとテンプレート化を行う自然な方法を提供します。
<C-j>
ジャンプは多くのVim-LaTeX補完機能で利用されます。ジャンプポイントはで示され<++>
ます。
組み込みの挿入モードのキーマッピングは、IMAP()
呼び出しとして実装されます。たとえばIMAP()
、main.vim
ファイル内の便利な呼び出しの長いリストを見つけることができます。
call IMAP ('__', '_{<++>}<++>', "tex")
call IMAP ('()', '(<++>)<++>', "tex")
call IMAP ('[]', '[<++>]<++>', "tex")
call IMAP ('{}', '{<++>}<++>', "tex")
...
call IMAP ('((', '\left( <++> \right)<++>', "tex")
call IMAP ('[[', '\left[ <++> \right]<++>', "tex")
call IMAP ('{{', '\left\{ <++> \right\}<++>', "tex")
...
次に、sayと入力すると()
、カーソルが括弧の間に自動的に配置され、最初のが置き換えられ<++>
ます。中にタイピングを終えた後、キック<C-j>
してバタンと音を立てると、カーソルが括弧から外に移動し、前にタイピングし続けます。あなたがそれに慣れると、それはちょっと中毒性のあるタイピングフローを形成し始めます...
上から見る\left
\right
と、オープニングブラケットを2回押すと、ペアを簡単に入力できます。そして、<C-j>
ジャンプするとタイピングの流れができます。
1つの主要なグリッチIMAP()
と<C-j>
の事はことである、彼らはあなたの最後の変更履歴を台無しに。(私は長い間修正したいバグの1つです。)したがって、.
「想定される最後の変更」にこれらの関数呼び出しが含まれている場合、最後の変更をやり直そうとすると予期しない動作が発生することがあります。
を使用してIMAP()
、単純なキーマッピングからより複雑なテンプレートまで、あらゆる種類のマッピングを実行できます。マッピングの例を次に示します(ftplugin/tex.vim
):
call IMAP('*EEQ',"\\begin{equation*}\<CR><++>\<CR>\\end{equation*}<++>",'tex')
call IMAP('DEF',"\\begin{definition}[<++>]\<CR><++>\<CR>\\end{definition}<++>",'tex')
call IMAP('BIC','\binom{<++>}{<++>}<++>','tex')
call IMAP('PVERB','\PVerb{<++>}<++>','tex')
call IMAP('VERB','\verb|<++>|<++>','tex')
imaps.vim
プラグインに関する興味深い事実は、プラグインがグローバルプラグインであるということです。これは、LaTeXを超えた潜在的な使用を意味します。確かに、私が使うのですか<++>
と<C-j>
(他のプラグインとの組み合わせ)jumppingsはCのコードスニペットのテンプレートを作成します
<F5> <F7>
コマンドと環境の挿入欠点の1つIMAP()
は、キーの組み合わせを通常のテキストで使用できないことです(マッピングを元に戻さない限りu
)。ケースではあなただけしたいことをトリガしますが、望むようにマッピングを<F5>
し、<F7>
便利になります。これらの2つのキーは、それぞれトリガー環境とインラインコマンド挿入に使用されます。また、ユーザーのモードとカスタマイズに基づいて動作が異なります。
挿入/通常モードでは、カーソルが単語を添付しているとき、または単語内にあるときに、<F5>
デフォルトでフォームの基本環境を挿入します
\begin{word}
<Cursor>
\end{word}<++>
言葉に基づいて; を押す<F7>
と、デフォルトで\word{}<++>
単語に基づいたフォームの基本的なインラインコマンドが挿入されます。
「デフォルト」では、<F5>
/ によってトリガーされる特定の単語の動作をカスタマイズできます<F7>
。ここに私の設定のいくつかがあります(.vimrc
):
let g:Tex_Com_newcommand = "\\newcommand{<++>}[<++>]{<++>}<++>"
let g:Tex_Com_latex = "{\\LaTeX}<++>"
let g:Tex_Com_D = "\\D{<++>}{<++>}<++>"
挿入/通常モードでは、カーソルが何にも接続されていない(単独で)場合、<F5>
/ <F7>
を押すと、挿入する環境/コマンドを選択するメニューが表示されます。または、下部に目的の環境/コマンドの名前を入力できます。個人的に、私はめったに使用しない<F5>
/ <F7>
この方法を。
テキストを選択してから<F5>
/ <F7>
を押すと、テキストを折り返すためのメニューが表示されます。次に、選択したテキストは、選択または入力した環境/コマンドでラップされます。
挿入/通常モードでは、カーソルが環境/コマンドの範囲内にあるときに、を押す<Shift>+<F5>/<F7>
と、環境/コマンドを変更するためのメニューが表示されます。
`a
に`z
対応する大文字。`8
for \infty
、`<
for \le
、`I
for \int_{<++>}^{<++>}<++>
などのような記号"
2回押すと、TeXの二重引用符が2つ取得されます。したがって、リテラル"
文字を入力するには、を使用する必要があります。\item
タグが挿入されます。\left
\right
ペアでラップできます。`(
`[
`{
Tex_FoldedSections
、Tex_FoldedMisc
、とTex_FoldedEnvironments
。組み込みのマッピングが行き過ぎている場合や、希望どおりに終了しない場合があります。組み込みのマッピングを再定義して上書きできますafter/ftplugin/tex.vim
:
call IMAP('`|','\abs{<++>}<++>','tex')
call IMAP('ETE',"\\begin{table}\<CR>\\centering\<CR>\\caption{<+Caption text+>}\<CR>\\label{tab:<+label+>}\<CR>\\begin{tabular}{<+dimensions+>}\<CR><++>\<CR>\\end{tabular}\<CR>\\end{table}<++>",'tex')
call IMAP('==','==','tex')
call IMAP('`\','`\','tex')
pdflatex
とxelatex
エンジンを切り替える必要があります。したがって、私は私の次の行を持っています.vimrc
:
"switch to pdflatex
function SetpdfLaTeX()
let g:Tex_CompileRule_pdf = 'pdflatex --interaction=nonstopmode -synctex=1 -src-specials $*'
endfunction
noremap <Leader>lp :<C-U>call SetpdfLaTeX()<CR>
"switch to xelatex
function SetXeLaTeX()
let g:Tex_CompileRule_pdf = 'xelatex --interaction=nonstopmode -synctex=1 -src-specials $*'
endfunction
noremap <Leader>lx :<C-U>call SetXeLaTeX()<CR>
これは厄介で複雑なトピックです。特定のPDFビューアと一定の運があれば、非常に簡単になります。しかし、それは主にグーグル検索の問題です。
全体として、獣を飼いならすためにいくらかの時間を投資しても構わないと思えば、うまくいくと思います。そうは言っても、時間と十分な知識があれば、オーバーヘッド機能を確実に削減し、他のプラグインとの統合の可能性を探ります。
vimtex
と並行して作業することができLatex-Suite
ますが、2つのプラグインのベストを引き出すことができることを意味、同時に。:)