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

그래서 제가 착각한 것이 아니라면 첫 번째와 두 번째 시도에서는 기본 메커니즘이 작동하는 것으로 나타났지만 모든 것을 하나로 합치느라 애쓰고 계시죠? !

문제는 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()

관련 정보