
특정 폴더 내의 파일에 대해 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