특정 폴더에 있는 파일의 경우 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>
노트:date
이 기능은 , stat
및 의 GNU 버전에 따라 다릅니다 touch
.
답변4
이 bash
기능을 사용해 보세요(기준:샤오시의 답변)
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