Vim이 너무 많은 파일 (스왑, 백업, 실행 취소 등)을 남기지 않도록하려면 어떻게해야합니까?


13

기본적으로 vim스왑 파일은 내 프로젝트 디렉토리에 남겨두고 충돌하면 백업 파일이 남습니다.

이것을 막을 수 있습니까? 아니면 모든 프로젝트 .VCSignore파일 을 업데이트해야 합니까?

답변:


16

백업 파일

Vim은 기본적으로 백업 파일을 남기지 않습니다. Vim이 버퍼를 디스크에 저장하는 동안 존재하는 일시적인 파일 일뿐입니다. :help backup-table이 동작에 설명 된대로 'backup''writebackup'옵션 으로 제어 할 수 있습니다.

'backup' 'writebackup'  action  ~
   off       off    no backup made
   off       on     backup current file, deleted afterwards (default)
   on        off    delete old backup, backup current file
   on        on     delete old backup, backup current file

스왑 파일

스왑 파일은 전용 디렉토리에 수집하는 것이 유용 할 수 있습니다. 'directory'옵션을 사용하여 수행 할 수 있습니다 . 예를 들어

:set directory^=$HOME/.vim/tmp//

$HOME/.vim/tmpVim이 스왑 파일을 만들 때 사용하려고하는 디렉토리 목록의 헤드에 추가 합니다. 후행으로 //인해 Vim은 전체 경로 이름을 파일로 인코딩하므로 다른 디렉토리의 비슷한 이름의 파일과 충돌하지 않습니다.

주의 사항 : 스왑 파일이 다른 위치에 저장되어 있기 때문에 여러 사용자가 동일한 파일을 편집하려고 할 때 Vim이 알 수있는 기능을 효과적으로 비활성화합니다.

아래의 스 니펫 ( tpope의 vimrc 에서 수정)은 수정되지 않은 버퍼의 스왑 파일을 비활성화합니다. 여러 파일을 열었을 때 Vim / 컴퓨터가 충돌하면 남아있는 스왑 파일은 수정 된 파일의 경우

autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
  \ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif

주의 사항 : 스왑 파일은 버퍼가 수정 된 경우에만 존재하므로 설정과 비슷한 효과가 있습니다 'directory'. 버퍼가 수정되지 않으면 다른 Vim이 예고없이 편집을 시작할 수 있습니다. 두 번째 Vim이 첫 번째 Vim이 더 많은 변경을 수행하기 전에 저장하면, 사용자가 저장을 시도하거나 파일이 수정되었는지 확인하기 위해 Vim을 트리거 할 때까지 통지되지 않습니다.


5

.vimrc공유 서버를 포함한 여러 컴퓨터에서 내 컴퓨터를 사용 합니다. 필자는 사람들이 내가 작업하는 파일을 볼 수있는 것을 원치 않으며 홈 디렉토리를 비교적 깨끗하게 유지하는 것을 좋아합니다. 그래서 이것은 Linux 및 Mac OS X에서 잘 작동하는 솔루션입니다.

" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
  :silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif

set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,

.tmp디렉토리 ~/.vim가 존재하지 않는 경우 디렉토리 가 작성 됩니다. 이것은 스왑 파일의 새로운 홈입니다. 실행 취소 파일의 경우 다음과 같은 내용도 있습니다 .vimrc(꽤 비슷합니다).

if exists("+undofile")
  " undofile -- This allows you to use undos after exiting and 
  "             restarting. NOTE: only present in 7.3+
  "             :help undo-persistence
  if isdirectory( $HOME . '/.vim/.undo' ) == 0
    :silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
  endif
  set undodir=~/.vim/.undo
  set undofile
endif

1

이것이 내 vimrc에서하는 일입니다.

fun! MkdirIfNeeded(dir, flags, permissions)
    if !isdirectory(a:dir)
        call mkdir(a:dir, a:flags, a:permissions)
    endif
endfun

" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
    let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
    let tmpdir = 'C:/tmp/vim_' . whoami
else
    let whoami = substitute(system("whoami"), '\n', '', '')
    let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)

let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir

이 파일을 만들고 /var/tmp/vim_<username>이를 사용하여 모든 vim 관련 파일을 저장합니다. 프로젝트 디렉토리를 깨끗하게 유지하십시오.

사용 whoami하면 별도의 디렉토리를 사용하면서 vimrc를 전체적으로 (예 : 사용자 및 루트) 사용할 수 있습니다. 필요하지 않은 경우 빠른 시작을 위해 하드 코딩 된 디렉토리로 바꿀 수 있습니다. ~/.vim/디렉토리 를 사용할 수도 있지만 /var/tmp일반적으로 별도의 파일 시스템이기 때문에 사용 하는 것이 좋습니다.

재부팅 할 때 종종 지워 /var/tmp지기 때문에 사용 /tmp합니다. 파일을 열 때 사람들이 잠재적으로 유해한 작업을 수행하기 위해 파일을 배치 할 수 있기 때문에이 디렉토리를 세계에 쓸 수있는 파일로 원하지 않을 것입니다.


1
/var/tmp항상 세계 쓰기가 가능합니다. 시스템 임시 디렉토리입니다. (글쎄, 당신은 그것을 바꿀 수는 없지만, 유닉스 계열 시스템은 그것을 깨뜨린 후에 조각을 유지할 수있게 된 것들 중 하나입니다). 시스템에 다른 사용자가있는 경우 /var/tmp/vim_«your_username»원하는 권한으로 만들 수 있습니다 . 그런 다음 중요한 파일에 대한 심볼릭 링크로 채우십시오. vim 임시 파일에 의해 손상 될 수 있습니다.
derobert

@derobert 존재하지 않는 경우에만. 이 시스템 전체를 사용하고 많은 사용자가있는 경우이 디렉토리 작성을 adduser사용자 또는 사용자를 작성하는 데 사용하는 모든 것에 추가 할 수 있습니다. 어쨌든 대부분의 사람들은 신뢰할 수있는 컴퓨터에서 Vim을 사용합니다 (그러나 귀하의 의견은 좋은 것입니다).
Martin Tournoij

존재하지 않는 경우에만 수정하십시오. 시스템 임시 디렉토리에있는 임시 파일을 정리할 때 예상치 못하게 발생합니다. 왜 $HOME어딘가에 넣지 않았는지 잘 모르겠습니다 .
derobert

@derobert 글쎄, /var/다른 파일 시스템입니다. 이 이론이가 쓰기를 많이 방지 할 수 있다는 것입니다 /, /usr또는 /home덜 분열 및 충돌의 경우 파일 손상의 위험을 선도 ...이 사서함과 물건에 이유도 /var에 기본적으로, 그리고 homedir ...
마틴 Tournoij
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.