
vim에 열려 있는 구성 파일이 있지만 때때로 디스크에서 변경되어 변경 사항이 터미널에 반영되지 않습니다. 파일을 닫았다가 다시 열지 않고 화면을 새로 고칠 수 있나요? 그렇다면 어떻게 해야 할까요?
답변1
:edit
파일 이름을 지정하지 않고 이 명령을 사용하여 현재 파일을 다시 로드할 수 있습니다 . 파일을 수정한 경우
:edit!
현재 파일을 강제로 다시 로드할 수 있습니다(수정 사항이 손실됩니다).
이 명령은 :edit
로 축약될 수 있습니다 :e
. 따라서 강제 편집은 다음과 같이 수행할 수 있습니다.:e!
답변2
수동 새로 고침 파일을 사용하는 것 외에도 :edit
다음을 사용할 수도 있습니다.~/.vimrc
:set autoread
Vim이 편집하지 않은 모든 파일을 Vim이 자동으로 새로 고치도록 합니다. 또한보십시오 :checktime
.
답변3
긴 이야기 짧게
당신의 삶을 더 좋게 만들기 위해 추가할 줄을 Wrap-up
보려면 제목 으로 이동하십시오 .vimrc
수동
달리기:checktime
Vim 외부에서 버퍼가 변경되었는지 확인하세요. 두 가지 버전의 파일이 생성되면 확인하고 경고합니다.
자동으로
변경 사항을 자동으로 로드하려면 다음을 추가하세요 vimrc
.
파일이 Vim 외부에서 변경되었지만 Vim 내부에서는 변경되지 않은 것이 감지되면 해당 파일을 자동으로 다시 읽습니다. 파일이 삭제되면 이 작업이 수행되지 않습니다.
이 답변경고를 추가하세요:
!ls
외부 명령(예: 등!sh
) 을 실행하는 것과 같은 작업을 수행하지 않는 한 자동 읽기는 파일을 다시 로드하지 않습니다.
솔루션을 얻으려면 계속 읽어보세요.
커서가 움직이지 않으면 발생합니다.
다음에 추가하세요 vimrc
:
au CursorHold,CursorHoldI * checktime
기본적으로,커서 홀드커서가 4초 동안 정지 상태를 유지한 후 트리거됩니다. 이는 다음과 같은 방법으로 구성할 수 있습니다.업데이트 시간.
버퍼 변경 또는 터미널 포커스에 의해 트리거됨
변경 버퍼에 다음이 추가되면 vimrc
발생합니다.autoread
~에윔:
au FocusGained,BufEnter * :checktime
일반 vim에서 터미널 창 포커스 캡처
일반 vim에서 작업 하려면 FocusGained
(위 참조) 터미널 에뮬레이터(Xterm, tmux 등) 내에 플러그인을 설치하십시오.
vim-tmux-focus 이벤트
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() !~ '\v(c|r.?|!|t)' && getcmdwintype() == '' | 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
.
감사해요이 답변cmdwin 문제를 해결하는 데 사용됩니다.
답변4
이것은 neovim의 루아 버전입니다:
-- 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
vim.api.nvim_create_autocmd({'FocusGained', 'BufEnter', 'CursorHold', 'CursorHoldI'}, {
pattern = '*',
command = "if mode() !~ '\v(c|r.?|!|t)' && getcmdwintype() == '' | checktime | endif",
})
-- Notification after file change
-- https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
vim.api.nvim_create_autocmd({'FileChangedShellPost'}, {
pattern = '*',
command = "echohl WarningMsg | echo 'File changed on disk. Buffer reloaded.' | echohl None",
})