目的
目的は、Vimを使用してファイルに書き込むときにファイルの数を更新することです。日付がファイルにある場合、日付部分は同じままである必要がありますが、最後の数字は1ずつ増やす必要があります。
努力する
1回試してください
/ホーム/ユーザー/.vimrc
autocmd BufWritePre /tmp/test :%s/\d\{10}/\=strftime("%Y%m%d00")/
/一時/テスト
4014122100
ファイルに書き込んだ結果は次のとおりです。
2014122100
"/tmp/test" 2L, 29C written
2回試してください
/ホーム/ユーザー/.vimrc
autocmd BufWritePre /tmp/test :%s/\d\{10}/\=strftime("%Y%m%d00")/
autocmd BufWritePre /tmp/test :%s/\d\{10}/\=submatch(0)+1
/一時/テスト
4014122100
ファイルに書き込んだ結果は次のとおりです。
2014122101
"/tmp/test" 2L, 29C written
3回試してください
function! ChangeDateIfApplicableAndIncrementLastDigit()
if !match(getline(1,"$"),strftime("%Y%m%d")) >= 0
autocmd BufWritePre /tmp/test :%s/\d\{10}/\=strftime("%Y%m%d00")/
endif
autocmd BufWritePre /tmp/test :%s/\d\{10}/\=submatch(0)+1
endfunction
autocmd BufWriteCmd /tmp/test call ChangeDateIfApplicableAndIncrementLastDigit()
期待されるパフォーマンス
Number of writesExpected result
1 2014122101
2 2014122102
3 2014122103
現在の結果
Number of writesCurrent outcome
1 2014122101
2 2014122101
3 2014122101
答え1
だから私が間違っていない場合は、最初と2番目の試みでは基本的なメカニズムが機能することがわかりましたが、すべてを1つにまとめるのに苦労していますか? !
問題は、BufWriteCmd
フックがバッファ内容自体を作成する必要があることです。これネットワークたとえば、プラグインはそれを使用してリモートファイルシステムアクセスを実装します。関数のフックを定義しBufWritePre
、現在の日付が見つかったかどうかに基づいてアクションを実行します。
function! ChangeDateIfApplicableAndIncrementLastDigit()
if !match(getline(1,"$"),strftime("%Y%m%d")) >= 0
%s/\d\{10}/\=strftime("%Y%m%d00")/
else
%s/\d\{10}/\=submatch(0)+1
endif
endfunction
autocmd BufWritePre /tmp/test call ChangeDateIfApplicableAndIncrementLastDigit()