vi (m)에서 열린 파일의 변경된 내용 새로 고침 사항이 터미널에 반영되지 않고 디스크에서 변경됩니다. 파일을

vim에서 열어 둔 구성 파일이 있지만 때로는 변경 사항이 터미널에 반영되지 않고 디스크에서 변경됩니다. 파일을 닫았다가 다시 열지 않고 화면의 내용을 새로 고칠 수 있습니까? 그렇다면 어떻게?



답변

:edit파일 이름을 지정하지 않고 명령을 사용 하여 현재 파일을 다시로드 할 수 있습니다. 파일을 수정 :edit!한 경우 현재 파일을 강제로 다시로드 하는 데 사용할 수 있습니다
(수정 내용이 손실 됨).

이 명령 :edit은로 축약 될 수 있습니다 :e. 따라서 강제 편집은 다음과 같이 수행 할 수 있습니다.:e!


답변

수동으로 파일을 새로 고침 할뿐만 아니라 :edit, 당신은 넣어 수 있습니다~/.vimrc

:set autoread

Vim이 편집하지 않은 파일을 Vim이 자동으로 새로 고치도록합니다. 도 참조하십시오 :checktime.


답변

TL; DR

삶의 질을 높이기 위해 추가 할 줄 Wrap-up제목으로 건너 뜁니다 vimrc.

수동으로

운영 :checktime

Vim 외부에서 버퍼가 변경되었는지 확인하십시오. 파일의 두 가지 버전으로 끝나는지를 확인하고 경고합니다.

자동으로

변경 사항을 자동으로로드하려면 다음을 추가하십시오 vimrc.

set autoread

파일이 Vim 외부에서 변경된 것으로 감지되어 Vim 내부에서 변경되지 않은 경우 자동으로 다시 읽습니다. 파일이 삭제되면 수행되지 않습니다.

이 답변 은주의 사항을 추가합니다.

외부 명령 실행 (예 !ls: !sh등) 을 수행하지 않으면 자동 읽기가 파일을 다시로드하지 않습니다.

솔루션을 읽으십시오.

커서가 움직이지 않을 때 트리거

에 추가 vimrc:

au CursorHold,CursorHoldI * checktime

기본적으로 CursorHold 는 커서가 4 초 동안 정지 한 후에 트리거되며 updatetime을 통해 구성 할 수 있습니다 .

버퍼 변경 또는 터미널 포커스에서 트리거

vim 내부에서 버퍼를 변경할 때 vimrc트리거 하려면 다음을 추가하십시오 .autoread

au FocusGained,BufEnter * :checktime

일반 Vim 내부에서 터미널 창 초점 잡기

FocusGained터미널 에뮬레이터 (Xterm, tmux 등) 내에서 일반 vim에서 작동하도록 하려면 (위 참조) vim-tmux-focus-events 플러그인을 설치하십시오.

tmux 버전> 1.9에서는 다음을 추가해야합니다 .tmux.conf.

set -g focus-events on

마무리

autoread트리거가 가능한 경우에도 알림 .

vimrc위의 모든 내용을 구현하는 줄 은 다음과 같습니다 .

" Triger `autoread` when files changes on disk
" https://unix.stackexchange.com/questions/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" https://vi.stackexchange.com/questions/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
autocmd FocusGained,BufEnter,CursorHold,CursorHoldI * if mode() != 'c' | checktime | endif
" Notification after file change
" https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
  \ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None

와 함께 올바른 방향으로 나를 가리켜 준 ErichBSchulz에게au CursorHold 감사합니다 .


답변