Programing

파일 변경 감지, 파일 다시로드 제안

lottogame 2020. 12. 27. 10:14
반응형

파일 변경 감지, 파일 다시로드 제안


나는 일반적으로 편집을 위해 gVim을 사용하지만 내 컴퓨터에 원격으로 연결할 때 때때로 vim을 사용합니다.

gVim에서 파일을 열고 외부에서 변경된 경우 (예 : 저장소의 새 업데이트) gVim에서 파일을 다시로드하도록 제안합니다.

그러나 Vim에서 이러한 일이 발생하면 파일을 저장하려고 할 때까지 아무것도하지 않습니다. 파일이 변경되었음을 경고 할뿐 다시로드 할 수는 없습니다.

Vim의 동작을 gVim과 일치시키는 설정이 있습니까?


이것은 FileChangedShell이라는 자동 명령을 사용하여 수행됩니다. 나는 링크를 게시하기에는 너무 새롭지 만 가장 좋은 방법은 vim 문서의 autocmd 부분을 읽는 것입니다.

하지만 요점은 vimrc에 다음 줄과 같은 것을 설정하는 것입니다.

:au FileChangedShell * echo "Warning: File changed on disk"

업데이트 된 파일을 열려면

:e

열린 파일을 다시로드해야합니다.


으로 ashcatch는 말했다 :checktime명령은 디스크에 변화를 확인하고 다시하라는 메시지를 표시합니다. 따라서 checktime일부 이벤트 후에 Vim이 자동으로 실행되도록 설정하십시오 . 사용할 이벤트는 귀하에게 달려 있습니다. 한 가지 가능성 CursorHold은를 사용 하는 것입니다.는 커서를 이동 한 후 updatetime밀리 초 동안 그대로두면 실행 됩니다. (기본값 4 초)

:au CursorHold * checktime

또한 설정 WinEnter하거나 BufWinEnter버퍼 / 창 사이를 전환 할 때마다 변경되도록 설정할 수도 있습니다 . 당신이 정말로 편집증이라면 CursorMoved커서를 움직일 때마다 디스크의 파일을 확인하도록 설정할 수 있지만 그것은 아마도 과도하고 약간 지연 될 수 있습니다.

참조 :h checktime, :h updatetime, :h autocmd-events-abc.


Carper의 답변을 개선하려면 :

" Run checktime in buffers, but avoiding the "Command Line" (q:) window
au CursorHold * if getcmdwintype() == '' | checktime | endif

이 검사가 없으면 Vim은 "명령 줄"(q :) 버퍼를 사용하려고하면 오류가 발생합니다.이 버퍼는 :checktime명령을 지원하지 않기 때문 입니다. #vim의 kdlv 덕분에 이것을 발견했습니다.


를 사용하여 수동으로 검사를 트리거 할 수 있습니다 :checktime. gvim은 초점을 되 찾을 때마다이 작업을 수행하므로 수동 검사를 자주 수행 할 필요가 없습니다.

특정 시간 간격을 자동으로 확인하는 것과 같은 다른 접근 방식이 있는지 모르겠습니다.


답변에서 ( PhanHaiQuang 의 답변 flukus 의 의견 참조 )

필요할 때 ex (whithin vim)에서이 oneliner를 실행할 수 있습니다 (또는 로그 파일이 열릴 때 각 명령을 vimrc에 넣습니다).

:set autoread | au CursorHold * checktime | call feedkeys("lh")

설명 :
- autoread은 : 더 내부 타이머 또는 그런 일이없는, 외부에서 변경된 파일을 읽고 (하지만 자신의 작업을 나던 그것은 단지 정력이 예에서 명령과 같은 작업을 수행하는 파일을 읽습니다. :!
- CursorHold * checktime : 'updatetime'(기본적으로 4000 밀리 초)에 지정된 시간 동안 사용자가 커서를 이동하지 않은 경우 파일 외부에서 변경 사항을 확인하는 checktime이 실행됩니다.
- call feedkeys ( "lh") : 커서가 한 번, 오른쪽 및 왼쪽 뒤로 이동 한 다음 아무 일도 일어나지 않습니다 (... 즉, CursorHold가 트리거되어 루프 가 있음을 의미 함 )

참조 URL : https://stackoverflow.com/questions/923737/detect-file-change-offer-to-reload-file

반응형