2018-10-31 .vimconf.swp 2018 thinca
-
Vim は help が充実していることで有名
-
困ったらまずは :help
-
:help してると安心です
-
チャット上で Vim の help が引ける bot
-
Vim のチャットルームにあることが多い
-
複数の実装がある
- 私(thinca)が作ったものもある
:help CTRM-M
:help a`
-
:help keyword
に反応して対応する help を表示 -
タグから次のタグの直前までの範囲を表示
-
細かい例外等もある
-
bot 絡みの部分は省略
- hubot で作っています
-
与えられた keyword から help の文を出す部分
-
実際に Vim を起動する
-
help を実行する
-
対象の範囲を探して出力
$ vim -u NONE -i NONE -N -Z -X -R -e -s
-u NONE -i NONE
... 設定なし viminfo なし-N
... .swp なし-Z
... 制限モード-X
... X なし-R
... リードオンリー-e -s
... バッチモード
-
-e -s
-
標準入力に Ex コマンドを流し込む
-
:print
など一部のコマンドの結果が標準出力に出る
verbose silent help {keyword}
?\%(^\s*$\|[^*]$\)?/\*\S\+\*/;/^*\|[^*]$/-1/^\s*\*\S\+\*\|\*\S\+\*\s*\%(>\)\=$/?^[^=-].*[^=-]$?print
qall!
{keyword}
に表示したい help のキーワード- 1 行目で該当の help ページにジャンプ
- 2 行目でその内容を表示
- 3 行目で Vim を終了
-
しかしよく見ると 2 行目が若干わかりづらい
-
何をしているのかについて解説
- 2 行目を意味のある単位で分割してみる
?\%(^\s*$\|[^*]$\)?
/\*\S\+\*/
;
/^*\|[^*]$/
-1
/^\s*\*\S\+\*\|\*\S\+\*\s*\%(>\)\=$/
?^[^=-].*[^=-]$?
print
?\%(^\s*$\|[^*]$\)?
/\*\S\+\*/
;
/^*\|[^*]$/
-1
/^\s*\*\S\+\*\|\*\S\+\*\s*\%(>\)\=$/
?^[^=-].*[^=-]$?
print
:{開始行};{終了行}print
-
:{range}print
{range}
で指定した範囲を表示する- バッチモードでは標準出力へ
-
:{開始行};{終了行}print
{開始行};{終了行}
が{range}
{開始行};{終了行}
- おなじみ {range} 指定の高度なバージョン
/
や?
でパターンにマッチする行を指定,
の代わりに;
で区切る
?\%(^\s*$\|[^*]$\)?
/\*\S\+\*/
- コマンド実行時でカーソルは help タグの行にある
- 正規表現は複数書ける
- 出てくる度にカーソルが移動する
- 空行やタグの前の行へ移動
- その直後のタグへ移動
;
,
の代わりに;
で区切る- カーソル行の代わりに直前に指定した 行から次の行の探索を開始する
/^*\|[^*]$/
-1
/^\s*\*\S\+\*\|\*\S\+\*\s*\%(>\)\=$/
?^[^=-].*[^=-]$?
/^*\|[^*]$/
- タグではない最初の行へ移動
-1
- 1つ前の行に移動
/^\s*\*\S\+\*\|\*\S\+\*\s*\%(>\)\=$/
- 次のタグまで移動
\*\S\+\*
がタグ
?^[^=-].*[^=-]$?
- 戻って余分な末尾を省く
- 必ず 1 行は移動する
- 空行や区切り行 (====) を飛ばす