Humanity

Edit the world by your favorite way

Vim で無名バッファを復元する方法

TL;DR

  1. スワップファイルを残したディレクトリに :cd して、
  2. :new 等で)無名バッファを開き、
  3. :recover を実行する。

説明

デフォルトだと Vim はそのファイルを開いた時点に復元するかどうかのダイアログを表示すると思います。 というか自分はスワップファイルから復元したい場合は常にその方法で復元していました。

recover - Vim日本語ドキュメント

:rec[over] [file]       スワップファイルから[file]を回復するよう試みる。もし
                        [file]が与えられていない場合は、現在のバッファの名前が
                        用いられる。現在のバッファの内容は失われる。このコマン
                        ドはバッファが修正を加えられている場合に失敗する。

:rec[over]! [file]      ":recover" と同じだが、現在のバッファに対するどんな変
                        更も失われる。

ご覧の通り :recover はファイル名を指定する事でそのファイルをスワップから復元できます。 しかし無名バッファの場合は [file] が渡せないので、無名バッファを開いた状態で :recover と引数無しで呼ぶ事で無名バッファの復元を行えます。

(どうでもいい)経緯

自分は今まで無名バッファの場合もスワップファイルが作られるのを知りながらなぜかいつも諦めたりしていました(まぁ無名バッファに書く内容なんて大した事ないメモ書きが多い事もありますが)。 ただ今回失われるのも惜しいって事で初めて調べた結果、冒頭の方法が分かりました(初めて)。 習慣とか思考停止怖い。

おまけ: :retab! でインデントをタブやスペースに変換したりできる

これまで自分は :retab はタブからスペースへの変換にしか使えないと思い込んでいましたが、 :retab!! を付ければ、'expandtab' オプションがオンであればスペース、オフであればタブに変換されます。

普通に知ってるよって人も多いでしょうが、思い込みって怖いですね(わざわざタブへの変換用に :Unretab とかいうコマンドを自作していた思い出)。

Google Apps Script で Gmail の添付ファイルを自動で Google Drive に保存

そういえばこんなもの作ってたので、備忘録がてらブログにも書きます(2ヵ月近く経ってますが…)。

使用方法

使う時は

  1. 専用の Google Drive フォルダを作成
  2. 専用の Gmail のラベル(保存済み用マーカー)を作成
  3. Google Apps Script の Home から以下のコードをコピペ
  4. SAVE_FOLDER_ID (保存したい Google Drive のフォルダの ID)を 1 で作ったフォルダの ID に変更
  5. READ_LABEL_NAMEGmail ラベル)を 2 で作ったラベル名に変更
  6. あとはお好みで定期的に自動実行させたい場合はトリガーを作成
    • (あんまりいないと思いますが)手動実行で運用したい人は不必要

保存したい Google Drive のフォルダを指定

var SAVE_FOLDER_ID = 'フォルダのID';

の部分を保存したい Google Drive のフォルダの ID に変えて下さい。 フォルダの ID はコメントにも書いてある通り Google Drive でフォルダに移動した時のURLで分かります。

例: https://drive.google.com/drive/u/1/folders/{フォルダのID}

既読マーカー用 Gmail のラベルを指定

添付ファイルを保存したかどうかチェックするために付けるラベルです。

var READ_LABEL_NAME = '添付ファイル保存済み';

の部分を作った Gmail のラベルに変えて下さい。

特定のメールの添付ファイルのみ保存

var SEARCH_CONDITION = 'has:attachment -label:' + READ_LABEL_NAME;

の部分を好きなように変えて下さい。 例えば以下の様に件名で絞り込んだりできます。

var SEARCH_CONDITION = 'subject:"重要書類" has:attachment -label:' + READ_LABEL_NAME;

自動実行させるためにトリガーを作成

とりあえず現在だとエディター画面の上部メニューから「編集→現在のプロジェクトのトリガー」でトリガーの画面を開いた後、右下の「トリガーを追加」ボタンから作成できます。 自分はこんな感じで作りました。

f:id:tyru:20190321123620p:plain
給与明細保存スクリプト - トリガー設定

コード

BSD cp だと source のパスの末尾に "/" が付いていると中身をコピーする

どういう事かというと

という事です(手抜き記事)。