端末アプリで Ctrl-[ が Esc になる理由
理由
SHIFT キーはキーコードを -0x20、CTRL キーはキーコードを -0x40 する機能
全文
vim-jp.slack.com の #random から。
heavenshell [10:08 AM] TouchBar MBP にしたら強制的に C-[ になるので、オススメです!ようやく矯正できた。 mattn [10:09 AM] 人間の方が最適化されている yoshitia [10:12 AM] Escが物理的にない状況用にデフォルトでCtrl-[ 用意してるのすごい mattn [10:14 AM] いや、用意した訳ではないです。 SHIFT キーはキーコードを -0x20、CTRL キーはキーコードを -0x40 する機能なのです。 なので `[` つまり 0x5b は 0x1b になる。 0x1b = ESC 同様に CTRL-H は H が 0x48 なので 0x08、つまり BS になる。 yoshitia [10:17 AM] 元からある仕組み上、代用ができちゃうだけなんですね mattn [10:17 AM] ですです。 逆に言うと `;` は 0x3b なので CTRL を使うと 0 以下になる、つまり使えないという事です。 端末の場合はマッピング出来る事もありますが、gvim で出来ないのはそれが理由です。 yoshitia [10:19 AM] 符号付UNICODEの機運(ない KoRoN [10:26 AM] 僕は ENTER の代わりに CTRL+M 使うことが多い。 (0x4D - 0x40 = 0x0D) あれ? あれ? M=0x4D, m=0x6D だな。 小文字基準で CTRL は -0x60 とすべきなのかな。 (edited) mattn [10:30 AM] あ、ですです これちなみに Unicode も受け継いでてくれてて KoRoN [10:30 AM] でもそうすると 5b が説明つかん? mattn [10:30 AM] `a` と `A` は -0x60 なんすよね CTRL は 0x40 KoRoN [10:31 AM] やっぱ大文字基準で、 SHIFT=+0x20 CTRL=-0x40 のほうが合致しそう。 KoRoN [10:32 AM] そういや昔のプログラム、全部大文字だったりしたな。 mattn [10:32 AM] これ、0 割れした場合の処理が端末毎に異なってるのがイヤらしいんすよ。 * 受け付けない * 300 から引く みたいな色々流儀がある
コマンドラインで動くリンク切れチェッカー
ちょっと前 Twitter で教えてもらったのでブログに書いてみる。
gem i rawler
— syui (@syui__) September 16, 2018
pip install linkchecker
とかどうでしょう。
wgetでも出来そうなんですけど、tyruさんの目的には合わないでしょうか?https://t.co/xjJAJsxKy9
— rat (@rattcv) September 16, 2018
最初 <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 便利。
linkchecker と crawler はあんまり調べてないけど、 linkchecker は色々高機能でサイトマップの生成なんかもできたりするっぽい。 crawler は "BFS webcrawler that implements Observable" とのことで recursive でも幅優先で見てくれるのが特徴かも。
Vim の端末ウィンドウから別のウィンドウに移る時にコマンドを実行中にしておく
を書いた後 vimrc を整理していたら書きかけの設定があったのでこれも公開。
autocmd vimrc
の vimrc
は適当に変えてください(分からない人はそのままでもいいです)。
" 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
で一旦端末ノーマルモードに移って出力を止めた後、
そのまま別のバッファに移動しようとすると端末ジョブモードに戻してコマンドを実行中の状態にします。
すごくニッチですが、個人的には端末ノーマルモードにしたいのはコピペする時や遡って出力を見たい時ぐらいなので、
別ウィンドウに移る時は端末ジョブモードにしておいて欲しいというのがあります。
上記の設定はそれを行ってくれます。