git diff の出力を畳む Ex コマンド
foldmethod=expr
は重いし filetype=diff
とかじゃない捨てバッファ(例えば :r!git diff foo...bar
して出力を取り込んだバッファ)でもサクッと畳みたいので作った。
:FoldDiff
すると現在バッファの git diff
の出力を畳みます。
command! FoldDiff call s:cmd_fold_diff() function! s:cmd_fold_diff() abort if getline(1) !~# '^diff ' 1,/^diff /-1 delete _ endif normal! zE 1 while search('^diff ', 'W') ?^diff ?,.-1 fold endwhile .,$ fold endfunction
プラグインとして作るなら foldmethod=expr
になるだろうけどデカい diff とかの時つらそう(適当)。
ちなみに上記のコードは git diff
以外、例えば素の diff
の出力とか他 VCS の diff とかは試してないので色々適当です。
空白をスキップして縦に移動するマッピングを提供する Vim プラグイン作りました
空白をスキップして縦移動するマッピングを提供するシンプルなプラグインを作りました。
言葉で説明すると分かりにくいと思うのでそれぞれスクリーンショットを貼ります。
non-blank mappings
関数定義・if・while などブロック・ステートメントの対応する始まり・終わりに飛びたい時などに使ってます。
" マッピング例 nmap sj <Plug>(columnskip:nonblank:next) omap sj <Plug>(columnskip:nonblank:next) xmap sj <Plug>(columnskip:nonblank:next) nmap sk <Plug>(columnskip:nonblank:prev) omap sk <Plug>(columnskip:nonblank:prev) xmap sk <Plug>(columnskip:nonblank:prev)
Python とかでは役に立たない…ように見えるかもしれませんが、「上 (下) に空白をスキップしてぶつかる行まで飛びたい」という風に考えると割と便利に使えています。
first non-blank mappings
トップレベルに定義した関数等の始まり・終わりに飛びたい時などに使ってます。
" マッピング例 nmap ]k <Plug>(columnskip:first-nonblank:next) omap ]k <Plug>(columnskip:first-nonblank:next) xmap ]k <Plug>(columnskip:first-nonblank:next) nmap [k <Plug>(columnskip:first-nonblank:prev) omap [k <Plug>(columnskip:first-nonblank:prev) xmap [k <Plug>(columnskip:first-nonblank:prev)
どんな時に便利か
個人的には編集する言語に限らず汎用的に使えるマッピングを導入したい派なので、
textobj-function などの言語ごとにしか使えないマッピングはあまり導入したくはなかったりします(この言語では使えるか使えないかを考えるのが面倒)。
なのでインデント・空白等、なるべくどのテキストフォーマットでも使える構造に着目した結果、このようなマッピングを作りました。
どちらも vimrc で温めていたもので、ふと紹介したらプラグイン化してほしいとの事だったので今回プラグイン化しました。ぜひご利用ください。
身の回りのタスクを GitHub Project で運用してみたら案外良かった(あと Google Keep も)
こんな感じで割とずぼらな自分でも、GitHub で管理すると見える化できてモチベーションにもなるのか、割とちゃんと運用できています。
他リポジトリの issue も参照できるし、GitHub Project ええやん pic.twitter.com/cFmENuFaGa
— tyru (@_tyru_) 2020年4月22日
Google Keep
ちなみに Google Keep も併用しだして、リマインダーとして使ってます。運用方針はこれ。
Google Keep と併用して混乱したけど、Google Keep はリマインダ。GitHub Project は TODO リスト。
— tyru (@_tyru_) 2020年4月22日
TODO リストでやってることを明日のこの時間にやりたい、とかリマインダに「も」登録してもいい。
合言葉は「積むなら TODO リスト行き」
そもそも TODO リストとリマインダーは別物ですが、意識せず使うとついつい混同してしまいがち。
なので運用方針を決めておくと「これはどちらに登録すべきか?」が明確になって迷わずに済む。
- リマインダー = リマインドするもの。アラーム + メッセージ。スヌーズ機能必須(よく先延ばしするので…)
- TODO リスト = 次に自分が行動する指針となるもの
ちなみに Windows タブレットに常時表示するためにモニターアームに立て掛けたりもしたんですが、
- すぐ電源が切れたり(電源オプション変えても再現する。古いタブレットなのでもう寿命?)
- クラムシェル運用している MacBook Pro のモニタも開いてデュアルにしたい時、タブレット用のマウンタが邪魔で外部モニタを上にスライドできない
- 結局見なかったり
と微妙だったのでやめました。
2番目は何が言いたいかというとこんな感じ。
MBP も開く場合は上にスライドしないと被るんですよね(写真暗くて笑う)
ちなみになんでいつもデュアルモニタにしないのかというと、何となくメインモニタ(でかい外部モニタの方)が上にあると疲れる気がするからです。
横置きにすればいいじゃないかとも言われそうですが、横は横で Windows 用のモニタがまた縦に2台あるのでスペースがありません。
ただずっと試した訳ではないので一度デュアル運用して首が疲れるか検証した方が良さそう。
Slack の /remind
以前は Slack の /remind
をリマインダーとして使っていたのだけど、それだと「20分後」「1時間後」「3時間後」「明日」「来週」しか選べなかったりして厳しかった。
ちなみにいつからか分からないけど、多分この前の UI 変更と一緒に「カスタム」が追加されて1時間ごとに指定が可能になりました。
ただ分単位までは指定できないので依然としてちょっとつらい…
(ちなみに /remind
ならできるのでは?という意見ももらいましたが、登録したりスヌーズをスマホで行うこともあり /remind
の記法をスマホで打つのがちょっと面倒だったので)
追記: これスヌーズだとカスタム選べないんですね…(特に前と変わってない)