🦍
LanguageToolのLinterで英文法をチェック
初めに
ども、今年から本格的に英語を勉強し始めたゴリラです。
みなさん、英文法チェックするときはどうしていますか?
GrammarlyやDeepLを使って翻訳した文を確認する、といったやり方があるかと思います。
しかし、自分はVimで英語を書くのがメインになることが多いため、Vimで英文を書きながら、間違った場合は指摘してほしいなと思っています。
そこで、LanguageToolを使って、必要に応じて文法チェックをしてくれるようにLintツールlanguagetool-lintを作りました。
今回の記事はこのLintツールの紹介になります。
使い方
まず最初にLanguageToolをインストールする必要がありますが、Dockerがある場合は次のコマンドでサーバを立ち上げられます。
$ docker run -d -p 8010:8010 erikvl87/languagetool
languagetool-lint
は主に標準入力と指定されたファイルの英文をチェックして、次のような結果を出力します。
フォーマットはfilename:line:col
というふうになっていて、どの行のどの列から始まる単語が変なのかを教えてくれます。
$ cat your_text_file
When you type |:write|, then it would be executed in terminal, and
you can choose any options(e.g add labels).
$ languagetool-lint -a http://localhost:8081 -l "en-US" your_text_file
your_text_file:2:27: The abbreviation “e.g.” (= for example) requires two periods.
$ echo "this is a pen." | languagetool-lint
stdin:1:0: This sentence does not start with an uppercase letter.
この出力をVimのlocationリスト/quickfixに流すと、簡単に英文法を修正できます。
上記のデモは次の設定になっています。
function! s:languagetool_lint() abort
let fname = expand('%')
if !filereadable(fname) || &modified
let fname = tempname()
call writefile(getline(1, '$'), fname)
endif
let cmd = printf('languagetool-lint %s', fname)
lgete system(cmd) | lw
endfunction
command! LanguageToolLint call <SID>languagetool_lint()
LS(Language Server)として使う
efm-langserverと組み合わせることで、LSを通して間違った英文を教えてくれます。
詳細の設定はこちらを参照してください。
最後に
今回LSはefm-langserver
を通していますが、将来的にlanguagetool-lint
自身にLSを実装して、efm-langserver
への依存をなくしたいと考えています。
CodeAction
で単語を登録したり、正しい文法を選択できたら便利かなと思います。
Discussion