종종 버전 제어되는 파일로 작업하고 있으므로 Vim 외부에서 파일을 변경할 수 있습니다.
Vim을 닫았다가 다시 열지 않고도 파일을 빠르게 다시로드하는 방법은 무엇입니까? 그리고 이것을 자동으로 수행하는 방법이 있습니까?
종종 버전 제어되는 파일로 작업하고 있으므로 Vim 외부에서 파일을 변경할 수 있습니다.
Vim을 닫았다가 다시 열지 않고도 파일을 빠르게 다시로드하는 방법은 무엇입니까? 그리고 이것을 자동으로 수행하는 방법이 있습니까?
답변:
원하는 명령은 :e
(의 줄임말 :edit
)입니다. 사용 :edit!
하면 로컬 변경 사항이 삭제되고 다시로드됩니다.
set autoread
vimrc에서 vim이 자동으로이를 수행하도록 할 수도 있습니다 .
:bufdo :e
또는:bufdo :e!
:
는 선택 사항입니다. :bufdo e
동일하게 작동합니다.
많은 경우이 답변이 설명하는 set autoread
것처럼 작동하지 않습니다 .
외부 명령 실행 (예
!ls
:!sh
등) 을 수행하지 않으면 자동 읽기가 파일을 다시로드하지 않습니다.
포커스 이벤트는 트리거 autoread
되지만 사용하지 않으면 캡처되지 않습니다 gvim
. 따라서 vim
터미널 창 또는 tmux 내 에서 일반을 실행하는 경우 플러그인 vim-tmux-focus-events를 설치하십시오 .
tmux 버전> 1.9에서는 다음을 추가해야합니다 .tmux.conf
.
set -g focus-events on
더 좋은 점을 위해 vim 내부에서 버퍼를 변경할 때 다음을 추가 vimrc
하면 트리거 autoread
됩니다 .
au FocusGained,BufEnter * :checktime
https://github.com/djoshea/vim-autoread 를 개선하는 멋진 플러그인autoread
vim이 디스크에 기록되었지만 vim에서 마지막으로 쓴 이후 버퍼에서 수정되지 않은 파일을 자동으로 다시로드합니다. 이를 통해 vim에서 열린 파일을 다른 응용 프로그램을 사용하여 편집하고 저장할 수 있습니다. vim으로 돌아 오면 마지막 변경 이후 파일을 수정하지 않은 한 : e를 수동으로 누른 것처럼 디스크의 변경 사항을 반영하도록 파일이 자동으로 업데이트됩니다.
파일의 내용을보고, 파일을 외부 적으로 업데이트하고, 변경된 파일을 표시하고, 필요할 때 파일을 편집 할 수있는 옵션이 있습니다. 이 답변 에서 영감을 얻은 Vim 서버 / 원격 명령 행 옵션으로 해결했습니다 .
다음 명령을 사용하면 외부 명령을 통해 파일을 다시로드 할 수 있습니다. 먼저 서버 인스턴스를 시작하면서 Vim으로 문제의 파일을 엽니 다.
vim --servername JABBERWOCKY /tmp/alice.log
파일이 외부에서 변경되었다고 가정합니다 (예 : a) echo "Curiouser and curiouser" >> /tmp/alice.log
. 필요한 경우 서버 인스턴스에 명령을 보내 파일을 다시로드하십시오. 이 명령은 빠르게 완료되며 새 편집기를 생성하지 않습니다.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
열린 파일이 Vim 및 외부에서 변경된 경우 다시로드하는 동안 충돌이 발생합니다 (경고 메시지가 표시됨). 이 경우 결정을 내려야합니다. 그대로두고 Vim에서 변경 사항을 유지하거나 로컬 변경 사항을 버리고 다시로드하십시오 .
--remote-send
위 의 명령을 수동으로 다시로드해야합니다. 그러나이 명령은 Bash 's for
/ while
를 사용하거나 Linux / Unix에서 해키 한 라이너를 사용 하여 간단한 루프에 연결할 수 있습니다 .
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
테스트되지는 않았지만 PowerShell에서도 이와 같은 것을 실현할 수 있다고 확신합니다.
Linux / Unix에서는 너무 미친 파일 시스템을 사용하지 않는 경우 inotify 라이브러리를 사용하여 파일 시스템 이벤트를 수신함으로써 이벤트 중심 접근 방식을 실현할 수 있습니다 . 개인적으로 나는 도구를 사용하여 좋아 ENTR 주요 리눅스 배포판에 포함 된 것으로 보인다 많이. 그럼 나는 얻는다 :
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>