備忘録やめた

備忘録として使用していたけどやめた.このブログに載せてあるコードのライセンスは別途記載がない限りWTFPL OR NYSLです.

TabNineとvimtexの紹介

この記事はUEC Advent Calendar 2019 - Adventar4日目の記事です.

otackma.hatenablog.com

昨日のアドベントカレンダーの記事は旅記事でした,いいですねえ.記事中では青梅,飯能,相模湖が紹介されていましたが,写真が載っている奥多摩湖も良さそう.今度行ってみようかな.

概要

Vimの布教ではありません.あまりに膨大で紹介しきれなかったので急遽プラグイン紹介となりました.許して.

想定環境

動作確認というかいつも使っているのはGentooです.Ubuntuで確認していません,CentOSWindowsもなしです.でも多分大丈夫です.なにが.

とりあえずVimを用意してください.話はそれからだ.

紹介するもの一覧

  • TabNine
  • vimtex

TabNine

tabnine.com

概要

TabNineに関してはVimにこだわる必要はないです.VSCodeでもEmacsでもAtomでもJupyter Notebookでも大丈夫です.「とりあえずVimを用意してください.」とは.

TabNineは補完ソフトです.つまり,VSCodeとかで文字を打ってTabキーで選択するあれです.VimではCtrl-p,Ctrl-nです.

補完機能
補完機能
ちなみにこれはVimです.

で,なんで既にVSCodeVimに補完機能があるのにTabNineをインストールするのかですが,TabNineはディープラーニングを用いていて,補完機能が強化されているのです*1

例えばこんな風に,for文も楽楽*2

TabNineの紹介gif
TabNine + Vim
もっとも,for文のような典型的なものの場合はスニペットを使うほうが便利です.VimならneosnippetやUltiSnipsがあります.ちなみに僕はUltiSnipsを使用しています.

github.com

github.com

インストール

tabnine.com とりあえずここを参照してください.ここではVimvim-plugの組み合わせの場合について説明します.

  1. Plug 'zxqfl/tabnine-vim'~/.vimrcに記述.
  2. :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一覧についてはこちらから.

langserver.org

TabNineとlspを組み合わせることもできます.方法はSemantic Completion | TabNineに書いてあります.要約すると

  1. 必要ならlspをインストールする.lspのインストールコマンドを後述するTabNine.tomlに書くこともできるのですが,例えばroot権限などが必要になってインストールが上手く行かないこともあります.また例えばHaskellhieなんかは自分でインストールしないといけません.そういう場合は予めインストールしてください.CやC++ならcquery,ccls,clangdがあります.clangdは多分clangをインストールすればついてくるはず. github.com github.com
  2. 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"]
  1. 該当する言語のファイルを開き*3TabNine::semと打ちます.上手く行けばlspがインストール,そして実行されます.

以上.よいTabNine生活を!

vimtex

github.com

概要

LaTeXで書こうという圧力呼びかけはよく弊学でもなされていますが,Wordと違って一々コンパイルしないといけないんですよね.それを自動化してくれるのがこれです.

vimtexの実行の様子のアニメgif
vimtex実行の様子

これだと様子がよくわからないのですが,PDFの更新は自動で行われています.最初にコマンドを実行しないといけないですが,その後は自動です.素晴らしい.ちなみにVimの下の方にあるエラー表示などに関してはsyntasticというプラグインで動いています.興味のある方はこちらもどうぞ.

github.com

vimtexについては他にもいろいろ機能があるのですが,正直PDF自動更新で満足しているって感じではあります.

インストール

ここにあるように,vim-plugならTabNineと同じようにやってください.

設定

インストール即使用!とはいかないのがTeX関係.特に日本語に関してはpLaTeXなど,ある種独自の文化を築いている感じもあって,なかなかうまく行かないんですよね.これについて一つ一つ説明をしたほうがいいだろうとは思いますが,いかんせん来週試験があるので,とりあえず僕の設定集をここに載せておきます.

使用しているソフト
  • latexmk
  • upLaTeX
  • zathura

upLaTeXについてはこちら.pLaTeX使用者ならこちらは基本的に使えるはずです.

texwiki.texjp.org

また僕は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

使い方

VimTeXファイルを開いたあと,\llを押してください.スラッシュに,小文字のLが2回です.もし.vimrcでリーダーキーを変えているとしても,\llです.これを実行することでコンパイルが実行され,PDFビューワが起動します.その後は保存毎に自動でコンパイル,ビューワの更新が行われます.また,この時再度\llを押すと自動コンパイルが停止します.以下,\llを押す毎に自動コンパイルの有効無効が切り替わります.

もしPDFビューワを閉じたあとで再度起動したいときには\lvを実行してください.スラッシュ,小文字のL,小文字のVです.

参考文献

vimtexについてはTeX Wikiに記事があります.こちらも参照してください.

texwiki.texjp.org

感想

くぅ~疲れましたw初めてのアドベントカレンダー参加でした.はじめは意気込んで書いてたんですが,結局まとまらなくてこんな感じになりました.次は飽きずに課題を終わらせてから書きたいです.

よくわからないところがあったらコメントください.できる限り対応します.

明日はaskjfbdさんです.

mapfold.hatenablog.com

*1:ただし,ディープラーニングでの補完機能強化はフリー版の場合開始30日間のみの模様.ベータ版は記事執筆時点で無料かつディープラーニングでの補完が日数無限なので今はこちらを使うと良いかもしれない

*2:ただしこれは後述するTabNine Cloudも利用しています

*3:C言語のファイルならfoo.cなど