Humanity

Edit the world by your favorite way

コマンドラインで動くリンク切れチェッカー

ちょっと前 Twitter で教えてもらったのでブログに書いてみる。

qiita.com

最初 <a> タグを見つけて再帰的に調べてくれるやつが欲しかったので見た感じ linkchecker が最適かと思ったけど、 インストールにちょっとだけ躓いてしまってその間に wget でもできると教えてもらって試したらこれで十分だった。

こんな感じの結果が出る。

wget --spider --recursive --level=inf --no-verbose --execute robots=off localhost:8000

Found 3 broken links.

http://localhost:8000/aaa
http://localhost:8000/bbb.html
http://localhost:8000/js/foo.js

シングルページの場合は puppeteer とか使った方が良いんだろうけど、今回はそういうわけではなかったのでこれで良かった。 wget 便利。

linkcheckercrawler はあんまり調べてないけど、 linkchecker は色々高機能でサイトマップの生成なんかもできたりするっぽい。 crawler は "BFS webcrawler that implements Observable" とのことで recursive でも幅優先で見てくれるのが特徴かも。

Vim の端末ウィンドウから別のウィンドウに移る時にコマンドを実行中にしておく

tyru.hatenablog.com

を書いた後 vimrc を整理していたら書きかけの設定があったのでこれも公開。 autocmd vimrcvimrc は適当に変えてください(分からない人はそのままでもいいです)。

" Enter Terminal-Job mode when leaving terminal window
autocmd vimrc TerminalOpen *
\ autocmd vimrc WinLeave <buffer>
\   if term_getstatus('') =~# '\<normal\>' |
\     execute 'normal! GA'                 |
\   endif

これを vimrc に書くと、端末ウィンドウで <C-w>N で一旦端末ノーマルモードに移って出力を止めた後、 そのまま別のバッファに移動しようとすると端末ジョブモードに戻してコマンドを実行中の状態にします。 すごくニッチですが、個人的には端末ノーマルモードにしたいのはコピペする時や遡って出力を見たい時ぐらいなので、 別ウィンドウに移る時は端末ジョブモードにしておいて欲しいというのがあります。 上記の設定はそれを行ってくれます。

f:id:tyru:20180925004513g:plain

Vim で端末ウィンドウを複製する

Vim で端末ウィンドウを使ってるとスクロールされた出力を見たくなる時があると思います。 ただシェルでコマンド実行中なので、 <C-w>N すると出力も止まってしまう。なるべくなら出力を止めたくないと思います(たぶん)。

そういう時は以下を vimrc に貼り付ければ <C-w>y で端末ウィンドウの複製バッファができます。色とかもそのまま。

追記 (9/25) すみません、以下のコードだとやっぱりスクロールされた出力は見れませんでした…直すのでお待ちください…というか誰か直してください…

tnoremap <C-w>y <C-w>:<C-u>call <SID>dup_term_buf()<CR>

function! s:dup_term_buf() abort
  let file = tempname()
  call term_dumpwrite('', file)
  call term_dumpload(file)
  setlocal nolist
  call delete(file)
endfunction

追記