私はFedora 34ワークステーションでVimをデフォルトのテキストエディタとして使用します。完了した時間とタスクを追跡できるように、私のコースの1つのログファイルを作成して維持する必要があります。次のようにする必要があります。
John Doe
Log for XYZ 1101, Fall 2021
***** IN: Thu Aug 26 08:13:11 PM EDT 2021
Enter my log notes here
***** OUT: Thu Aug 26 09:22:13 PM EDT 2021
メモ:IN:後ろにスペースを2つ、OUT:後にスペースを1つ
私はこのドキュメントを開くたびに(できない場合は与えられたコマンドに従って)***** IN: date
印刷され、カーソルが下の2行目の先頭に置かれるようにこのプロセスを自動化したいと思います。また、文書を閉じるたびに(または与えられたコマンドを実行するたびに)***** OUT: date
(そしてその後に空白行があるたびに)、最後のテキスト項目の下に2行を印刷する必要があります。これにより、与えられた2つのアイテムの間、そして私のメモとアイテムの日付の間に常に空白行があります。
誰でも私がこれを行うのを手伝ってくれるか、少なくとも案内してもらえますか?私はスクリプトを書いたり、高度なvim設定を台無しにしたことはありません。
編集する:@muruさんのコメントを使って使い方を探した結果、次のautocmd
ような結論が得られました。
autocmd VimEnter ~/test.log $pu=strftime('***** IN: %c')
autocmd ExitPre ~/test.log $pu=strftime('***** OUT: %c')
効果がある、しかし完璧ではありません。。問題は次のとおりです。
テキストの間に余分な空白行を置かないでください。 2つの改行を追加したいです。 Vims putコマンドを使用してこれを行うにはどうすればよいですか?それとも別の方法がありますか?
この
ExitPre
コマンドは私にとってうまくいく唯一のコマンドです。しかし、私がこれをするたびに、:w
そして:q
/:x
または出る日付が記録され、プログラムは終了しません。代わりに再保存して強制終了する必要があります:q!
。私は実際にこのエレガントなオプションを考慮しません。一度だけ終了して見ることができるように、このタスクがバックグラウンドで発生するようにしたいと思います。出る文書が開かれる次の日付。他のコマンドVimLeave
(たとえば、Vimを終了する前、viminfoファイルを作成した後)はまったく効果がありません。
どんな助けでも大変感謝します!
答え1
現在の問題は、オーディオ録音を使用して録音できます。
autocmd VimEnter ~/test.log $pu=strftime(\"***** IN: %c\n\n\n\")
autocmd ExitPre ~/test.log $pu=strftime('***** OUT: %c') | w
\n
二重引用符で展開します。ただし、使用するときは引用符をエスケープする必要があります=
。call append("$", [strftime("***** IN: %c"), "", ""])
または代わりに| norm G2o
。|w
で変更した内容を作成します$pu
。$pu
保存されていない修正が発生し、最初にシャットダウンに失敗しました。