プログラミング

Vim + ALE + textlint で校正

先日 Ale + Redpen を試してみましたがこれまで textlint を使っていたので ale に textlint サポートを追加してみました。
textlint が導入されており、カレントディレクトリに .textlintrc がある場合には textlint が動きます。

やっつけで追加しておいたけど一応動いたので PullRequest をしておいた。
追加すると動くコードはこちらを参考にしてください。

カレントに .textlintrc がない時は動かさないという判断をするのがどこでしてよいか分からずShellで書いちゃっていますが。

追記

  • 2018/03/24 リクエストしていた追加したものがマージされていますのでそのままで ALE を入れればそのまま使えます。
  • エラー内容がQuickfixで表示されますが本体をクローズしたらQuickfixがそのまま残っていることがありますので以下のコードを init.vim に追記しておくと一緒に閉じてくれます。
"Quickfixが残っている場合に閉じる
augroup QfAutoCommands
  autocmd!
        " Auto-close quickfix window
        autocmd WinEnter * if (winnr('$') == 1) && (getbufvar(winbufnr(0), '&buftype')) == 'quickfix' | quit | endif
augroup END

Vim + ALE + Redpen で行うかんたん校正

技術的な文章を書いていく上で簡単に日本語のチェックをしたいので Redpen を導入しています。
先日道入した neovim + ale 環境においても構成することが出来ます。

language Tools
AsciiDoc alex !!, proselint, redpen, write-good
Markdown alex !!, mdl, prettier, proselint, redpen, remark-lint !!, vale, write-good
Re:VIEW redpen

README をみると標準で md や adoc には redpen が利用できる事がわかります。

実際に neovim + ale で Redpen が導入されてると即座にチェックが入り動作する事がわかります。
しかし、vim + ale で実行された redpen は設定ファイルなしのディフォルトで検査されてしまい日本語の理解をしていません。

redpen はカレントディレクトリに redpen-conf.xml があると優先的に利用してくれるのでチェックをしたい場合にはこちらを設定しておく必要があります。 http://redpen.cc/docs/latest/index_ja.html

<redpen-conf lang="ja">
    <validators>
        <!--Rules on sentence length-->
        <validator name="SentenceLength">
            <property name="max_len" value="100"/>
        </validator>
        <validator name="CommaNumber"/>
        <validator name="HeaderLength"/>

        <!--Rules on expressions-->
        <validator name="SuccessiveWord" />
        <validator name="JapaneseStyle" />
        <validator name="InvalidExpression" />
        <validator name="JapaneseExpressionVariation" level="Info"/>
        <validator name="DoubleNegative" />
        <validator name="Okurigana"/>
        <validator name="JapaneseNumberExpression"/>
        <validator name="JapaneseAmbiguousNounConjunction" />
        <validator name="JapaneseJoyoKanji" />
        <validator name="LongKanjiChain" />
        <validator name="DoubledConjunctiveParticleGa" />
        <!--<validator name="SuggestExpression" />-->

        <!--Rules on symbols and terminologies-->
        <validator name="InvalidSymbol"/>
        <validator name="KatakanaEndHyphen"/>
        <validator name="KatakanaSpellCheck" level="info"/>
        <validator name="SpaceBetweenAlphabeticalWord" />
        <validator name="ParenthesizedSentence">
            <property name="max_count" value="3"/>
            <property name="max_nesting_level" value="1"/>
            <property name="max_length" value="10"/>
        </validator>

        <!--Rules on sections and paragraphs-->
        <validator name="SectionLength">
            <property name="max_num" value="1500"/>
        </validator>
        <validator name="EmptySection" level="Info"/>
        <validator name="GappedSection" />
        <validator name="SectionLevel" />
        <validator name="ParagraphNumber"/>
        <validator name="ListLevel" />

        <!--Load JavaScript validators-->
        <validator name="JavaScript" />
    </validators>
</redpen-conf>

私の環境の場合、 /usr/local/Cellar/redpen/1.10.1/libexec/conf/redpen-conf-en.xml が redpen コマンドのディフォルト設定となっています。
これ以外のパスでの優先的な走査はないようなので vim+ale で実行されるディフォルトの設定はこちらが参照されます。このファイルが英語を見てしまっているのでちょっと困りものです。 https://github.com/w0rp/ale/blob/master/ale_linters/markdown/redpen.vim を見ても -c のしていはないので標準側をウワがいておくくらいしかなさそうですね。

ということで強制的に

cd /usr/local/Cellar/redpen/1.10.1/libexec/conf/
cp redpen-conf-en.xml redpen-conf-en.xml.bak
cp redpen-conf-ja.xml redpen-conf-en.xml

としておきます。 brew upgrade redpen したあとは再度確認が必要です。

これで対象の md や adoc ファイルと同じ場所に redpen-conf.xml がない場合にはディフォルトを確認し、あれば優先的にカレントの設定ファイルが参照されます。結構ケアレスミスを含んだ文を書いてしまうので機械的なチェックだけでもされていると助かります。本当はもっと日本語を理解した 赤ペン がされると嬉しいのですね。

いまは、vim + ale の場合には textlint とか prh は利用できないのですがこちらも見ていきたいです。

ちなみにこのブログの文章を textlint で検査したら

❯❯❯ ./node_modules/.bin/textlint sample.md

/Users/hideaki/Desktop/メモ/sample.md
  16:50  error    一文に二回以上利用されている助詞 "が" がみつかりました。
  59:39  ✓ error  ディフォルト => デフォルト 
  74:29  error    本文: "である"調 と "ですます"調 が混在
=> "であれどされていると助かります" がである調
Total:
である  : 1
ですます: 4

との結果がでました。

neovim の Yank を クリップボード に入れる

vimではコピー機能は、Yank という物になりますが Yank をしてもOS側のクリップボードに入らないので他のアプリケーションとのやり取りは出来ません。画面上の文字をOSとして選択できればコピーできるのですが vim でマウスの動作をハンドリングするとそれと引き換えにvim側の動作になってしまいます。

  • :set mouse=a でマウスで画面を選択すると「ビジュアルモード」になる
  • その状態で選択を行っても Ctrl+C や Option+C ではコピーは出来ない

しかしvimがCripboardを利用できるようにコンパイルされている場合には Yank = クリップボード にすることが出来ます。

vimの確認

以下の用にコマンド実施して clipboard の前に 「+」が付いていれば利用することが出来ます。

❯❯❯ vim --version | grep clip
+clipboard         +jumplist          +persistent_undo   +virtualedit

vimの設定

" マウスの設定
set mouse=a
set clipboard=unnamed    " Yankした時にClipboardに入れる

これで選択した後に "+y このの順に入力する。(通常の y ではない)
これを打つとクリップボードに文字列がコピーされる。これで他のアプリケーションでペーストできる

様々なエディタでの操作を記録する Wakatime

その昔、ライフログとか大好きでiPhoneが出てきたときには熱中していていました。
最近はめっきりこの手のものを利用しなくなったのですがエディタの操作を自動的に記録してくれる Wakatime は好きで利用してます。

  • エディタの操作している内容を自動的に記録してくれます
  • gitリポジトリ(ローカルにgit init)のディレクトリ配下の操作が対象
  • フィアルタイプが記録される
  • かなり多くの種類のエディタやIDEに対応している
  • 有料プランにすると過去の記録も見ることが出来る(無償では7日間)

Dashboardを見ることは実はあまりないのですがメールでたまに送られてくる通知でどれ位エディタ(コード)に向かっていたのかがわかります。あまりにもコード書いて無くて愕然とする毎日です。

  • 最近Atomエディタ利用してなかったので全然記録されていません。

Wakatimeの設定

導入は pip3 install wakatime で行いまいした。
Wakatimeの設定は ~/.wakatime.cfg に設定します。この設定ファイルがあれば色々なクライアントは参照してくれるようです。

[settings]
api_key = xxxxxxxxxxxxxx%

VIMでの設定の仕方

neovim+deim利用してるので以下のように設定を記載します。

# wakatime 用のプラグイン/トラッキング
[[plugins]]
repo = 'wakatime/vim-wakatime'

Wakatimeを利用して

設定の中で GOAL と言うものが有りここで、毎日何時間とかこの言語を何時間とか目標を立てることが出来ます。最低でも毎日1時間とかでも目標を立てておくと目安になっていいかなと思います。ブラウザはChromeだけ対応していますがこれもプラグインいれておくと以下に –遊んで– 調査に時間がかかっているかがわかります。

対応しているエディタはこんなにあるのできっと利用している物があると思います。(エンジニアにとっての)ライフログトリたい人は利用してみると思い白いですよ。


* https://wakatime.com/editors

Atom+LinterからNeovim+ALEに環境を移行中

vimrcに疲れてATOMや、Vistual Studio Codeを使ってきたのだけどまた環境をvim(neovim)に戻している。まだvimrc(init.vim)は綺麗なものなのだが必要なものからプラグインを導入中。

構文チェッカ ALE(Asynchronous Lint Engine)

構文チェッカは色々あるのですがこちらが評判が良い(早い、軽い、簡単)みたいでしたので使ってみることにしました。複数のチェッカを同時に動かすことが出来るので色々いれている人には便利かと思います。

設定方法と導入方法

設定は vim + deim では1行記載するだけです。設定ファイルの方では以下のように記載しています。

[[plugins]]
repo = 'w0rp/ale'
hook_add = '''
        nmap <silent> <C-k> <Plug>(ale_previous_wrap)   "エラー個所への移動
        nmap <silent> <C-j> <Plug>(ale_next_wrap)
        let g:ale_sign_column_always = 1                "左端のシンボルカラムを表示したままにする
        " エラー行に表示するマーク
        let g:ale_sign_error = '⨉'
        let g:ale_sign_warning = '⚠'
        " エラー行にカーソルをあわせた際に表示されるメッセージフォーマット
        let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
        " エラー表示の列を常時表示
        let g:ale_sign_column_always = 1
        " ロケーションリストの代わりにQuickFixを使用する
        let g:ale_set_loclist = 0
        let g:ale_set_quickfix = 1
        " エラーと警告の一覧を見るためにウィンドウを開いておく
        let g:ale_open_list = 1
        let g:ale_keep_list_window_open = 0             " エラーと警告がなくなっても開いたままにする
'''

設定の仕方はこちらのサイトと上記のプラグインのサイトを参考にしています。

利用した感想

  • 動作しているイメージ

  • 満足しています。動作も早くて常に動いていても実用的(手持ちのコードの長さ程度であれば全然問題ない)
  • プラグインの読み込みは遅延読み込みにしておく方が良いです、そのままだとvim起動時に時間が1,2秒かかります。
  • 導入時に何故かtagが重複しているという旨のエラーで正常に導入できなかったので結果として ~/.config/deim/repos/github.com/の下に保管されている aleのコードを git cloneしてしまっています。それよりも deol.nvim がアップデートできずこちらの問題の影響かもしれません。
  • 導入が出来ているかを確認するには :ALEEnable などのコマンドが入っているかで判断しています。
  • ATOM時代の影響ですっかりマウス操作になれているのでついついQuickfixをマウスでクリックしたくなるのはそのうちに慣れるだろう
  • テキスト文章を書く際には textlint を利用していたのですが markdown や ascidocで利用するためには次のリンク先のように指定すればできそうです(まだやってみていません)
上部へスクロール