Vim이 자동 저장 파일을 만들 수 있습니까?


32

일부 워드 프로세서 및 텍스트 편집기는 편집중인 파일을 수시로 자동 저장하므로 심한 충돌 등에서 살아남는 데 매우 편리합니다.

Vim이 특정 간격 후에 파일을 자동 저장하도록하는 방법이 있습니까?

답변:


30

내장 옵션은 없지만 :help 'autosave'(todo.txt에서) 이러한 옵션이 수행 할 수있는 작업에 대한 설명을 참조합니다.

이를 구현하는 한 가지 가능한 방법은 CursorHoldautocommand 이벤트 를 사용하는 것 입니다. 이 이벤트는 사용자가 키를 'updatetime'밀리 초 동안 누르지 않으면 트리거됩니다 .

autocmd CursorHold * update

:update이 변경되는 경우 명령은 버퍼를 저장합니다. 삽입 모드가 활성화되어있는 동안이 작업 CursorHoldI을 수행하려면 이벤트 목록에 추가 할 수 있습니다.

autocmd CursorHold,CursorHoldI * update

다른 대안은 'autowrite'외부 명령을 실행하기 전에 (실행하기 전에 저장하는 데 유용 :make) 다른 버퍼로 전환 하기 전에 버퍼를 저장 하는 옵션 입니다.


작동하는지 어떻게 알 수 있습니까?
nilon

@nilon : w 자신을 누른 것처럼 저장된 상태 표시 줄에 인쇄해야합니다.
MaudPieTheRocktorate

12

Vim에는 자동 저장 기능이 있지만 "복구"파일에 저장합니다.

예를 들어 MyFile.txtvim은 문서를 편집 할 때 revovery 파일을 생성합니다 .MyFile.txt.swp. 시스템이 다운되거나 세션이 종료 된 경우 다음을 입력하여 다시 연결하고 기본적으로 중단 한 곳에서 복구 할 수 있습니다.

vim -r MyFile.txt

편집 할 파일이 열리고 마지막으로 변경 한 내용이 복구됩니다.

그런 다음 복구 된 버전을 일반적인 방법으로 저장할 수 있습니다 :w.

불행히도, vim을 종료하면 .MyFile.txt.swp주위 를 떠나 수동으로 제거해야합니다.

rm .MyFile.txt.swp

를 참조하십시오 "복구"남자 페이지 또한 제 11 장


1
Vim을 올바르게 종료하면 (예 : with :wqor :q!or and ZZetc) 스왑 파일이 자동으로 제거됩니다.
Doorknob

4
@Doorknob 당신이 복구 후 종료 할 때 ... ;-)
rolfl

8

타이머의 Vim 8 기능을 사용하여 주기적으로 버퍼를 저장 하는 플러그인 vim-autosave 를 만들었습니다 .


와우, Vim 8 플러그인이 이미 나옵니다. 멋져 보여, 크리스천!
thameera

고마워, 크리스천 이것은 유망 해 보인다. 플러그인이 새로운 / 저장되지 않은 파일을 지원하는지 궁금합니다. 플러그인 설명서에서 답을 찾을 수 없습니다. 내 컴퓨터는 지난 밤에 다시 시작하기로 결정했고 새 버퍼에 대한 몇 가지 간단한 메모가있었습니다. Vim은 swp 파일을 만들거나 보존하지 않았습니다.
JAponte

아니요, 현재 새 / 저장되지 않은 파일을 지원하지 않습니다. 원하는 경우 계속 진행하여 문제를 만드십시오.
Christian Brabandt

2

Vim이 포커스를 잃을 때마다 모든 것을 저장합니다.

autocmd FocusLost <your-patterns-here> silent! wall

내 패턴은 꽤 길며 여러 autocmds에서 사용하지만 완전성을 위해 다음과 같이 보입니다.

if exists(':keeppatterns')
    let s:keeppatterns = 'keeppatterns '
else
    let s:keeppatterns = ''
endif

augroup AutoSaveGroup
    " :help file-pattern has some info,
    " but some of it is is buried in the PATTERNS section of usr_40.txt
    let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"

    autocmd!
    execute "autocmd FocusLost"     s:autoPattern   "silent! wall"
    execute "autocmd BufWritePre"   s:autoPattern   s:keeppatterns . 'call FixFormatting(expand("<afile>"))'

    execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
    execute "autocmd FileChangedRO" s:autoPattern "write!"

    autocmd FocusLost   *.txt   silent! wall
augroup END

1

다른 사람들이 지적했듯이, vim에는 원본 파일이있는 곳 어디에서나 만들어 질 스왑 파일 (.swp)이 있지만 .vimrc 파일에서 .swp 디렉토리를 설정할 수 있습니다.

로 디렉토리를 생성 mkdir한 다음 .vimrc를 해당 위치로 설정해야합니다.

set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp

1

VIM-작업 공간 플러그인은 필요에 따라 수있는 매우 사용자 정의 자동 저장 기능이 있습니다. 기본적으로 작업 공간 세션 (주요 기능)에있을 때 자동 저장을 사용하도록 설정하지만 원하는 모든 항목 인 경우 항상 자동 저장하도록 설정할 수 있습니다 ( let g:workspace_autosave_always = 1).


1

텍스트가 변경 될 때마다 버퍼를 저장하십시오.

autocmd TextChanged,TextChangedI <buffer> silent write

이것은 나를 위해 작동합니다.

출처

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.