편집 후 수정된 타임스탬프 유지

편집 후 수정된 타임스탬프 유지

특정 폴더 내의 파일에 대해 vim이 "수정된" 타임스탬프를 전혀 건드리지 않기를 바랍니다.

제가 사용하는 배경은블록섬~/bloxsom모든 기사의 소스 로 일반 텍스트 파일을 사용하는 블로깅의 경우 . 기사 날짜(따라서 표시 순서)는 텍스트 파일의 수정 날짜를 기준으로 합니다. 나는 기사가 팝업되는 것을 원하지 않습니다.새로운오타를 고칠 때마다. (그래요많이 그 중... :D)

지금까지 vim은 타임스탬프를 변경하고 원래 스탬프는 영원히 손실됩니다. 이것은 괜찮습니다. 시스템에 있는 대부분의 파일에 대해 이 방식을 유지하고 싶습니다. 하지만 블로그 파일에는 그런 것이 필요하지 않습니다. touch필요할 경우 언제든지 파일을 사용할 수 있습니다.

vim을 이 동작으로 조정하는 방법에 대한 아이디어가 있습니까?

답변1

vim에는 이런 기능이 없는 것 같아요. 한 가지 대안은 복사본을 수정하고 타임스탬프를 적절하게 설정하는 것입니다. 예:

cp -p post temp
vim temp
touch -r post temp
cp -p temp post

또는 더 나은 방법은 다음과 같습니다.

touch -r post timestamp
vim post
touch -r timestamp post

답변2

즐거운 시간을 보내고 싶다면:

file=path; mtime=$(stat -c %y "$file"); vi "$file"; touch -d "$mtime" "$file"

경로를 실제 파일 경로로 바꾸십시오.

답변3

나는 훌륭한 해결책을 찾았습니다. 이 웹페이지, 기존 수정 시간을 유지하면서 현재 파일을 저장하는 vim 함수를 생성하고 이 함수를 F4기능 키에 바인딩합니다.

F4그러나 원래 함수 에는 수정 시간이 변경되면 vim이 혼란스러워지기 때문에 동일한 파일에서 를 두 번 사용하면 다음 경고를 유발하는 사소한 버그가 포함되어 있음을 발견했습니다.

WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?

운 좋게도 이 문제는 쉽게 해결할 수 있습니다. 타임스탬프를 복원한 후 파일을 다시 로드하기 위해 원래 함수에 "edit" 명령을 추가했기 때문에 vim은 파일에 예상되는 수정 시간을 알 수 있었습니다.

다음은 이 버그 수정으로 수정된 vim 함수입니다. 이 함수는 다음에 추가할 수 있습니다 ~/.vimrc.

function! WriteSmall()
    let mtime = system("stat -c %.Y ".shellescape(expand('%:p')))
    write
    call system("touch --date='@".mtime."' ".shellescape(expand('%:p')))
    edit
endfunction
map <F4> :call WriteSmall()<CR>

메모:이 함수는 GNU 버전의 date, stat및 에 의존합니다 touch.

답변4

bash기능을 사용해 보세요(기본적으로Shau ​​Shắc의 답변)

vi-preserve-time () {
    for file in "$@"; do
        local mtime=$(stat -c %y "$file")
        vi "$file"
        touch -d "$mtime" "$file"
    done
}

이제 이것을 사용하여 파일을 편집하고 수정된 시간을 보존할 수 있습니다.

vi-preserve-time file1.txt file2.txt

관련 정보