この記事はUEC Advent Calendar 2019 - Adventar4日目の記事です.
昨日のアドベントカレンダーの記事は旅記事でした,いいですねえ.記事中では青梅,飯能,相模湖が紹介されていましたが,写真が載っている奥多摩湖も良さそう.今度行ってみようかな.
概要
Vimの布教ではありません.あまりに膨大で紹介しきれなかったので急遽プラグイン紹介となりました.許して.
想定環境
動作確認というかいつも使っているのはGentooです.Ubuntuで確認していません,CentOSもWindowsもなしです.でも多分大丈夫です.なにが.
とりあえずVimを用意してください.話はそれからだ.
紹介するもの一覧
- TabNine
- vimtex
TabNine
概要
TabNineに関してはVimにこだわる必要はないです.VSCodeでもEmacsでもAtomでもJupyter Notebookでも大丈夫です.「とりあえずVimを用意してください.」とは.
TabNineは補完ソフトです.つまり,VSCodeとかで文字を打ってTabキーで選択するあれです.VimではCtrl-p,Ctrl-nです. ちなみにこれはVimです.
で,なんで既にVSCodeやVimに補完機能があるのにTabNineをインストールするのかですが,TabNineはディープラーニングを用いていて,補完機能が強化されているのです*1.
例えばこんな風に,for文も楽楽*2. もっとも,for文のような典型的なものの場合はスニペットを使うほうが便利です.VimならneosnippetやUltiSnipsがあります.ちなみに僕はUltiSnipsを使用しています.
インストール
tabnine.com とりあえずここを参照してください.ここではVimとvim-plugの組み合わせの場合について説明します.
Plug 'zxqfl/tabnine-vim'
を~/.vimrc
に記述.:PlugInstall
TabNine CloudとTabNine Local
Deep TabNineという,ディープラーニングのモデルを追加し精度を更に上げたものがあります.ただ,マシンの性能が良くないといけないということから,利用者はDeep TabNineではなく,サーバと通信をすることで間接的に利用するTabNine Cloudという機能を利用することができます.と思ったら最近TabNine Localというオフライン版も登場しました.これは業務上の理由などでクラウド通信ができない方がいたためです.現在ベータ版を利用可能です.どちらを利用する場合もBeta signup | TabNineからメールアドレスを登録してください.
lspの利用
Lispではありません.
lspはlanguage server protocolの略で,今までは補完機能と言語情報,つまり各言語のキーワードなどが一緒になっていましたが,最近はlspが言語情報のみを有していて,lspと補完機能が連携して補完を行うという方法があるようです.つまり純粋な補完機能と言語情報を分離させるということ.lspについての詳細やlsp一覧についてはこちらから.
TabNineとlspを組み合わせることもできます.方法はSemantic Completion | TabNineに書いてあります.要約すると
- 必要ならlspをインストールする.lspのインストールコマンドを後述するTabNine.tomlに書くこともできるのですが,例えばroot権限などが必要になってインストールが上手く行かないこともあります.また例えばHaskellのhieなんかは自分でインストールしないといけません.そういう場合は予めインストールしてください.CやC++ならcquery,ccls,clangdがあります.clangdは多分clangをインストールすればついてくるはず. github.com github.com
- TabNine.tomlに設定事項を書く.TabNine.tomlはエディタ内で
Tabnine::config_dir
と打つと表示されるディレクトリに書いてください.また,同ディレクトリにはExampleTabNine.tomlという設定例ファイルも存在します.ちなみに僕の設定ファイルはこちら.
[language.ruby] command = "solargraph" args = ["stdio"] install = [["gem", "install", "solargraph"]] [language.cpp] command = "clangd" [language.haskell] command = "hie-wrapper" args = ["--lsp"]
- 該当する言語のファイルを開き*3,
TabNine::sem
と打ちます.上手く行けばlspがインストール,そして実行されます.
以上.よいTabNine生活を!
vimtex
概要
LaTeXで書こうという圧力呼びかけはよく弊学でもなされていますが,Wordと違って一々コンパイルしないといけないんですよね.それを自動化してくれるのがこれです.
これだと様子がよくわからないのですが,PDFの更新は自動で行われています.最初にコマンドを実行しないといけないですが,その後は自動です.素晴らしい.ちなみにVimの下の方にあるエラー表示などに関してはsyntasticというプラグインで動いています.興味のある方はこちらもどうぞ.
vimtexについては他にもいろいろ機能があるのですが,正直PDF自動更新で満足しているって感じではあります.
インストール
ここにあるように,vim-plugならTabNineと同じようにやってください.
設定
インストール即使用!とはいかないのがTeX関係.特に日本語に関してはpLaTeXなど,ある種独自の文化を築いている感じもあって,なかなかうまく行かないんですよね.これについて一つ一つ説明をしたほうがいいだろうとは思いますが,いかんせん来週試験があるので,とりあえず僕の設定集をここに載せておきます.
使用しているソフト
- latexmk
- upLaTeX
- zathura
upLaTeXについてはこちら.pLaTeX使用者ならこちらは基本的に使えるはずです.
また僕はPDF表示にzathuraを使用していますが,これは別のものに変えても構いません.
~/.latexmkrc
$latex='uplatex -synctex=1 -halt-on-error'; $dvipdf='dvipdfmx %O %S';
~/.vimrc
Plug 'lervag/vimtex' if empty(v:servername) && exists('*remote_startserver') call remote_startserver('VIM') endif let g:vimtex_view_method='zathura' " zathuraでなくても構わない. let g:vimtex_compiler_latexmk = { \ 'options':[ \ '-verbose', \ '-file-line-error', \ '-synctex=1', \ '-interaction=nonstopmode', \ '-pdfdvi', \ ], \} let g:vimtex_compiler_latexmk_engines={'_':'-pdfdvi'} " See: https://texwiki.texjp.org/?vimtex let g:vimtex_fold_enabled=1 let g:vimtex_fold_manual=1
使い方
VimでTeXファイルを開いたあと,\ll
を押してください.スラッシュに,小文字のLが2回です.もし.vimrc
でリーダーキーを変えているとしても,\ll
です.これを実行することでコンパイルが実行され,PDFビューワが起動します.その後は保存毎に自動でコンパイル,ビューワの更新が行われます.また,この時再度\ll
を押すと自動コンパイルが停止します.以下,\ll
を押す毎に自動コンパイルの有効無効が切り替わります.
もしPDFビューワを閉じたあとで再度起動したいときには\lv
を実行してください.スラッシュ,小文字のL,小文字のVです.
参考文献
vimtexについてはTeX Wikiに記事があります.こちらも参照してください.
感想
くぅ~疲れましたw初めてのアドベントカレンダー参加でした.はじめは意気込んで書いてたんですが,結局まとまらなくてこんな感じになりました.次は飽きずに課題を終わらせてから書きたいです.
よくわからないところがあったらコメントください.できる限り対応します.
明日はaskjfbdさんです.