はじめに
これはVim駅伝4/5の記事です
皆さんはVimで文章を書きますか?
僕は書きます。
Vimとtextlintを連携させ、快適なVimライフを送っている人も多いのではないでしょうか?
そんな方は、
npm install -g textlint
のように、グローバルインストールしたtextlintを使うことが多いと思います。
しかし、これにはデメリットがあります
- textlintの拡張もグローバルインストール必要がある
- 用途に応じてtextlintのルールを分ける方法がめんどくさい
また、僕はファイルを作らず、なぐり書きをした状態のテキストをtextlintに入力として渡したいと思ったことが多いです。
そこで今回は、
- ファイルを作らずに文字を書く
- バッファに書き込んだ文字を指定したルールのtextlintに入力として渡す
- Vimでtextlintの出力を見る
を目的とし、この目的を達成するための環境づくりを紹介したいと思います。
いるもの
- Vim
- textlint
- vim-quickrun
1. ルールごとにtextlintプロジェクトを作成する
今回は例として、日本語用のtextlintプロジェクトを作成します
- 日本語ディレクトリ
まずはホームディレクトリにtextlintプロジェクト用のディレクトリを作成します。
mkdir -p textlint-ja
cd textlint-ja
textlintプロジェクトを作成します
npm install --save-dev textlint
npm install textlint-rule-preset-ja-technical-writing
npx textlint --init
see also:
これでtextlintの準備は完了です。
2. Vimの準備
今回の要件は
- ファイルを作らずに文字を書く
- バッファに書き込んだ文字を指定したルールのtextlintに入力として渡す
- Vimでtextlintの出力を見る
です。
これらの要件を満たすために以下のDraft関数を作成しました。
function! s:Draft()
enew | setlocal buftype=nofile bufhidden=hide noswapfile
" 指定するパスは、textlintプロジェクトのパス
set ft=markdown | lcd $HOME/textlint-ja
let g:quickrun_config['markdown'] = {}
let g:quickrun_config['markdown']['exec'] = 'cat %s | npx textlint --stdin-filename draft.md --stdin'
endfunction
command -nargs=0 Draft call s:Draft()
やってることとしては
- 新しく下書き用のバッファを作成する
- 手順1. で作成されたバッファのファイルタイプをmarkdownに設定する
- lcdコマンドを使って、下書き用のバッファのカレントディレクトリをtextlintプロジェクトに移動させる。
- vim-quickrunを設定する
です。
これでセットアップは完了です。
デモ
- :Draftを実行
- 作成された下書きバッファに文字を書く
- vim-quickrunを実行
これだけで、目的を達成できました
ここにデモを貼っておきます。
このように、ファイルを作らず、バッファに書き込んだ文字をそのままtextlintに渡せていますね!!!
改造例
上記の方法で目的を達成できましたが、改善点があります。
いくらか挙げておきます。
- textlintプロジェクトのパスをDraftコマンドで指定できるようにする
- Draftコマンドの定義をftpluginに書く
- visualモードで選択した範囲の文字をtextlintに入力として渡す
もし、この方法が気に入った方は、上記の改善例を試すとより豊かになると思います。
まとめ
この方法であれば、よりtextlintを便利にVim上で使えると思うので是非試してみてください!!!
追記
時間に余裕があれば、改造例で挙げた構成も追記するかもしれません