2

TextEdit.app と同様の動作を vim でエミュレートしようとしています。

仕事をしていると、メモをとるためにたくさんのファイルを開いて、保存せずにそのままにしておくことがよくあります。ラップトップを再起動すると、 AutoSaveのおかげで TextEdit ファイルがまだそこにあり、開かれます。vim(特にMacVim)で同じことをすると、ファイルは(予想どおり)保存されず、コンテンツが失われます。

この問題を解決するための私のレシピには 2 つの要素があります。最初のものは、ファイルを使用していないときにファイルを自動的に保存するため、次のようなコマンドを使用します。

autocmd BufLeave,FocusLost * silent! wall

これは、既に保存されているファイルには問題なく機能しますが、まだ保存されていないファイルは無視されます。これが 2 番目のビットの出番です。vim がこれらのファイルを保存しようとして、まだ名前を持っていない場合、これらのファイルに自動的にデフォルト名を付けてほしいと思います。おそらく、デフォルトの保存ディレクトリもあると思います。

理想的な解決策は、名前のないファイル/バッファがフォーカスを失ったときに~/Documents/notes/note_1.txt、 、2 番目のものnote_2.txtなどとして保存されることです。

どちらの方向にも役立つポインターを探しましたが (デフォルト名とデフォルト ディレクトリ - 後者は基本的ではありません)、何も見つかりませんでした。

誰でも助けることができますか?

4

1 に答える 1

5

私はあなたの考えが好きではありませんが、実行可能です。

関数が必要です:

function! SaveIt()
    if bufname("%")==''
        exec 'w /path/note_'.localtime()
    else
            w
    endif

endfunction

自動コマンドで、関数を呼び出すだけです。注意が必要な点:

  • ファイル名は/path/note_( ms since 1970). あなたの1,2,3..インデックスはvimにファイルシステムをチェックさせてインデックスを見つけさせます。より良い名前になる可能性があります。たとえばnote_2013-09-11_11:11:11.233localtime()

  • これにより、読み取り専用バッファーを保存しようとすると例外がスローされる場合があります。(ヘルプ、qf ...) ただし、それらを確認することはできます。

  • !in wcmdを追加しなかったことに注意してください。

  • autocmd では機能しない場合がありますwall。やりたい場合は、すべてのバッファをループし、各バッファに対して関数を呼び出す必要があります。

  • すべての機能がそれがどのように行われるかの方向性を示した後でも、それ (品質) はまだ「生産」レベルからはほど遠いです。

于 2013-09-11T23:11:08.477 に答える