vim에서 열어 둔 구성 파일이 있지만 때로는 변경 사항이 터미널에 반영되지 않고 디스크에서 변경됩니다. 파일을 닫았다가 다시 열지 않고 화면의 내용을 새로 고칠 수 있습니까? 그렇다면 어떻게?
vim에서 열어 둔 구성 파일이 있지만 때로는 변경 사항이 터미널에 반영되지 않고 디스크에서 변경됩니다. 파일을 닫았다가 다시 열지 않고 화면의 내용을 새로 고칠 수 있습니까? 그렇다면 어떻게?
답변:
:edit
파일 이름을 지정하지 않고 명령을 사용 하여 현재 파일을 다시로드 할 수 있습니다. 파일을 수정 :edit!
한 경우 현재 파일을 강제로 다시로드 하는 데 사용할 수 있습니다
(수정 내용이 손실 됨).
이 명령 :edit
은로 축약 될 수 있습니다 :e
. 따라서 강제 편집은 다음과 같이 수행 할 수 있습니다.:e!
:e!
.
:edit
하고 :edit!
사용할 수 :e
와 :e!
각각.
u
ndo 할 수 있습니다 :e!
.
:bufdo e
수동으로 파일을 새로 고침 할뿐만 아니라 :edit
, 당신은 넣어 수 있습니다~/.vimrc
:set autoread
Vim이 편집하지 않은 파일을 Vim이 자동으로 새로 고치도록합니다. 도 참조하십시오 :checktime
.
git pull
중이고 저장하지 않은 변경 사항은 화면에서 의도하지 않게 손실 될 수 있습니다.
:checktime
삶의 질을 높이기 위해 추가 할 줄 Wrap-up
제목으로 건너 뜁니다 vimrc
.
운영 :checktime
Vim 외부에서 버퍼가 변경되었는지 확인하십시오. 파일의 두 가지 버전으로 끝나는지를 확인하고 경고합니다.
변경 사항을 자동으로로드하려면 다음을 추가하십시오 vimrc
.
파일이 Vim 외부에서 변경된 것으로 감지되어 Vim 내부에서 변경되지 않은 경우 자동으로 다시 읽습니다. 파일이 삭제되면 수행되지 않습니다.
이 답변 은주의 사항을 추가합니다.
외부 명령 실행 (예
!ls
:!sh
등) 을 수행하지 않으면 자동 읽기가 파일을 다시로드하지 않습니다.
솔루션을 읽으십시오.
에 추가 vimrc
:
au CursorHold,CursorHoldI * checktime
기본적으로 CursorHold 는 커서가 4 초 동안 정지 한 후에 트리거되며 updatetime을 통해 구성 할 수 있습니다 .
vim 내부에서 버퍼를 변경할 때 vimrc
트리거 하려면 다음을 추가하십시오 .autoread
au FocusGained,BufEnter * :checktime
FocusGained
터미널 에뮬레이터 (Xterm, tmux 등) 내에서 일반 vim에서 작동하도록 하려면 (위 참조) vim-tmux-focus-events 플러그인을 설치하십시오.
tmux 버전> 1.9에서는 다음을 추가해야합니다 .tmux.conf
.
set -g focus-events on
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