読者です 読者をやめる 読者になる 読者になる

保存の度に指定ディレクトリにバックアップを残すプラグイン autobackup.vim を作りました。

vim

autobackup.vim はありていに言うと効率化された savevers.vim です。
私の愛用していたプラグインsavevers.vim というのがありました。ファイルを更新する度に更新前のバージョンを通し番号を付けてバックアップしてくれる奴です。
ただ、このプラグインは設計が古くてファイルが分割されていないのでVim起動に時間がかかるのと、通し番号を得るのに、いちいち全てのバックアップファイルを何度も調べていて、ファイルの数が増えてくるほど動作が遅くなるという問題がありました。
それで最近保存の度にいよいよVimが固まるようになってきたのでさすがにヤバさを感じて*1、これを効率よくした autobackup.vim を作りました。

autobackup.vim はデジカメのように内部で覚えている番号を振っている*2だけなのでかかる時間は一定です(たとえバックアップファイルを消してもそれが次に振られる番号に影響しません)。

まぁ、このご時世だからバックアップはバージョン管理が主なのでしょうけど、常に全てのファイルをバージョン管理しているわけでもないですし、実際、savevers.vim に命を救われたことは何度かあります。
そんなわけで、お守り程度に使っててもいいんじゃないかなーって思うわけです。

あと、バックアップファイル名をフルパスからの変換にしたので、同じファイル名でも区別してバックアップすることができるようになりました。

なお、savevers.vim にはバックアップファイルを削除する :Purge やバックアップの差分を見る :VersDiff といったコマンドがありますけど、正直これらのコマンドを使ったことが皆無ですし、それこそ重要なファイルならバージョン管理した上でバージョン管理の diff を使えばいいわけで、特に必要そうでもないし、めんどくさそうなのでそういうコマンドは作っていません*3

*1:そもそもsavevers.vimは定期的に:Purgeでバックアップを一掃することを想定した設計だと思われる

*2:正確には永続化した番号なのでVimが終了しても次に振られる番号はリセットされません。

*3::Purge に似たコマンドは作りかけてたけど、インターフェイスがイマイチだったしそもそもそういったことは Vim のする仕事じゃないと思い直して削除しました

QuickFix を使いやすくするプラグイン作りました

vim

unite.vim や ctrlp.vim なんてなくても Vim には標準で、ある処理の結果を一覧してくれる機能があります。
それが QuickFixコマンド と QucikFixウィンドウ (& ロケーションリストウィンドウ) です。

しかし QuickFix の操作方法はわかりにくく使いづらい。*1
それを改善するのが次のプラグインです。

anyakichi さんの vim-qfutil の、モードをトグルすることで、同じキーマッピングでQuickFix ウィンドウとロケーションリストウィンドウを操作するアプローチの影響を受けています。

機能

  • QuickFix ウィンドウの表示非表示をトグル
  • QuickFix のエラー と ロケーションリスト のエラー を同じキーマッピングで操作
  • QuickFix のエラーが発生するコマンドを呼ぶと自動で QuickFixウィンドウ (ロケーションリストウィンドウ) を開く
  • QuickFix ウィンドウ内で、カーソル行のエラーをプレビュー / 次のエラーをプレビュー / 前のエラーをプレビュー / ウィンドウを閉じる というローカルキーマッピングを提供

設定例

nmap cz <Plug>(qutefinger-toggle-mode)
nmap cn <Plug>(qutefinger-next)
nmap cp <Plug>(qutefinger-prev)
nmap cP <Plug>(qutefinger-older)
nmap cN <Plug>(qutefinger-newer)
nmap cv <Plug>(qutefinger-toggle-win)

*1:標準で用意されている 次のエラー、前のエラーへの移動方法が、コマンドラインから :cn :cp と入力することなのですが、こんな冗長なことをやっている人はいないでしょう。

Vimのマークをハイライトするプラグイン作りました

vim

久しぶりの投稿です。
なんか AdventCalendar に取っておこうと思ったら、いざそのときになると記事を書くのが怠くなってやらないパターンが多いので、
やはりこういう記事は公開した直後に書くのが一番なんだろうなって分かりました。

Vimのヘルプに

A mark is not visible in any way.
マークはどのようにしても見えません。

とありますが、それを覆すプラグイン作りました。
マークを見えるようにするプラグインならすでに

という素晴らしいものがあるのですが、このプラグイン(や類似プラグイン)は sign を使ってマークを可視化しています。
私は sign 苦手なんですよねー*1
あと、vim-signature は細かい設計が気に入らなかったり。

そんなわけで sign を使わずにハイライトするものを作りました。

f:id:leafcage:20150519163005p:plain

ただ、sign を使ったものと比べてマークの文字がその場でわかりづらいとか目立ちづらいという欠点はあるので、
将来的には sign にも対応させるかもしれません。
現状でも<Plug>(visiblemarks-info-buf)などで簡易的に一覧できますし、詳細な一覧は unite-mark や ctrlp-mark にお任せします。

あと、現在バッファ内にいくつマークがセットされているかモニタリングできる変数や、連番式にマークできる機能も付けたい。
今現在は気力がないのでここまでで。

*1:左側にカラムが増えて折りたたみ時に表示が不格好になるから

今の電子マネーの姿は間違っている

携帯電子マネーが淘汰されつつあるのは間違っている

おサイフケータイが登場したとき私は歓喜した。 これぞ正しい発展の仕方だと思った。 カードはどんどん電子マネーに置き換えられるべきだと思った。

iPhoneが上陸した後も私がiPhoneを眼中に入れなかったのは電子マネーに対応していなかったからだ。

今や日本の電子マネーは世界標準に敗北し、ケータイからは除去されつつある。 そして電子マネーは別にICカードを持つという原始的な方式に戻りつつある。

私は悲しい。 そして怒りを覚える。

ICカードの問題はかさばること。どうしても厚みが出る。 そして、複数持つとお互い干渉し合って読み込みエラーが起きることだ。 自動車免許証とか、図書館カードとか、普段ICカードとして使うことがほとんどないものがICカード化されたことで一緒に財布に入れておくことが出来なくなった。 これは明らかに間違っている。 こういった普段ほとんどICカードとして使うことがないものは、せめてICカードの機能をオフにできるようにするべきだ。

そしてサービス提供者は何でもかんでもICカードにするのではなく、磁気カードやバーコードで済ませられるものならそちらを採用するべきだ。 磁気カードやバーコードなら干渉は起こらないからだ。*1

(そして多分カードリーダーもそっちの方がコストが安い)

利便を考えると、消費者はICカードを一つだけ持ち歩くのがあるべき姿だ。 各サービスは全て一枚のICカードに集約されるべきなのだ。

私は今は財布に入れるICカードを電車の定期券とナナコ(セブンイレブンのやつ)に絞っている。 このように持つカードを制限されるのはおかしい。間違ってる。

*1:何でもかんでもEdy付けりゃいいと考えるなよ楽天さん

俺が破壊的変更をしない大人しい奴だと思ってたか?甘いぜ!

vim

拙作Vimプラグインの破壊的な変更を行いました。

autoload/ を全て廃して plugin/ だけにしました。
そしてリポジトリ名を変更しました(foldCC → foldCC.vim) .vimが付きました。

ヒストリファイルを作るディレクトリのデフォルト設定を変更しました。
"~/.cache/yankround" から "~/.config/vim/yankround" に変わりました)。
g:yankround_dir がデフォルト設定のままの方は、別の場所にファイルが吐き出されます。
そして過去のヒストリがそのままだと利用できません。
もし過去のヒストリが必要ならば、過去のファイル ~/.cache/yankround/history から新しいファイル ~/.config/vim/yankround/history にリネームするなり書き写すなりするようにお願いし申し上げます。

そして、不完全ですが、複数Vimを起動しているときのヒストリを共有的に利用できるようにしました。

以上、ご迷惑をおかけして申し訳ありません。

yankround.vim をビジュアルモードにも対応させました

vim
  xmap p <Plug>(yankround-p)
  xmap gp <Plug>(yankround-gp)

以上のようなマッピングを定義することで、ビジュアルモードでの p でビジュアル選択している部分と、レジスタの内容を置き換えることが出来ます(ここまでは Vim のデフォルトの挙動と同じです)。
<Plug>(yankround-prev) <Plug>(yankround-next) で貼り付けたテキストを置き換えられます。

ところで、yankround は、貼り付け操作を :execute 'normal! p' で行っていますが、ビジュアルモードから yankround の関数を呼ばれたときにはビジュアルモードが解除されているので、ビジュアルモードに再び入るために、gv バインドを使うようにしています。
ノーマルモードの gv は、最後に試用したのと同じ範囲のビジュアルモードを開始します。
その状態から p バインドで貼り付けを行うのですが、どうも、無名レジスタを使ったときの挙動が妙なのです。

普通にビジュアルモード選択してから、ビジュアルモードを解除した後、gvして再びビジュアル選択し、pをしたときには期待通りにテキストの置き換えは行われます(そして無名レジスタには代わりに選択されていた文字列が入ります)。
しかし、ビジュアルモードから:execute 'normal! gvp' を行ったときには、バッファに何の変化も生じません。
無名レジスタに元々入っていた文字列ではなく削除された文字列で置き換えが行われているのではないでしょうか(つまり、文字列を削除した後削除した文字列を貼り付けているので何も変わらないように見える)。
これが Vim の仕様なのかバグなのか分かりませんが、仕方がないのでビジュアルモード利用時には、レジスタ0も利用しています。
ですので、yankroundのビジュアルモードでの挙動はレジスタ0を汚染する仕様になっています。

私が使っているAndroid 8つのウィジェット + 5つの環境系アプリ

mobile

※サムネイルは後ほど掲載する予定です。

私が使っているAndroid 8つのウィジェット + 5つの環境系アプリ

Android 環境まとめ系記事第一弾。 私が利用しているのは実用的なものが多いです。

方針

  • 情報表示が主
    • 遊びは要らない。有益な情報を提供するか否か、それが全て。
  • 省スペース
    • いくらクールでも場所を取ってしまうものはダメ。私のホーム画面は狭いのだ。

ガジェット

環境

  • Migiued+★★ 右上の時計スペースを置き換える。時刻の他に電池残量やメモリ使用率を表示するようにする。

  • Elixir 2★★ ステータスバー(通知)に、各種アプリへのショートカットや、各種機能のオンオフボタンへアクセスするための領域を作る。

  • オートマナーTrial★ 指定した時刻にマナーモードにしたり、マナーモードを解除したりする。

  • Llama - Location Profiles★ 指定した時刻や、場所をトリガにして、にマナーモードのオンオフや wifi のオンオフなどが可能。

  • aNdClip クリップボード拡張 Free版クリップボードの履歴を取る。実はそんなに使ったことがない。