목적
목적은 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()