긴 이야기 짧게

긴 이야기 짧게

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

답변1

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

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

답변2

수동 새로 고침 파일을 사용하는 것 외에도 :edit다음을 사용할 수도 있습니다.~/.vimrc

:set autoread

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

답변3

긴 이야기 짧게

당신의 삶을 더 좋게 만들기 위해 추가할 줄을 Wrap-up보려면 제목 으로 이동하십시오 .vimrc

수동

달리기:checktime

Vim 외부에서 버퍼가 변경되었는지 확인하세요. 두 가지 버전의 파일이 생성되면 확인하고 경고합니다.

자동으로

변경 사항을 자동으로 로드하려면 다음을 추가하세요 vimrc.

set autoread

파일이 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",
})

관련 정보