Vimを使用してファイルに書き込むときにファイルの日付(該当する場合)をどのように更新し、最後の数字を1ずつ増やすことができますか?

Vimを使用してファイルに書き込むときにファイルの日付(該当する場合)をどのように更新し、最後の数字を1ずつ増やすことができますか?

目的

目的は、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()

おすすめ記事