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がさらに変更を加える前に2番目の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。これは、スワップファイルの新しいホームになります。UNDOファイルの場合、次のものもあります.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常に全ユーザーが書き込み可能です。これはシステムの一時ディレクトリです。(そうではないように変更することもできますが、それは、Unixのようなシステムが、壊れた後も断片を保持できることを喜んでいるものの1つです)。システムに別のユーザーがいる場合、そのユーザーは/var/tmp/vim_«your_username»自分が選択した権限で作成できます。次に、重要なファイルへのシンボリックリンクを入力します。これはおそらくvim tempfilesによって破壊されます。
デロバート

@derobert存在しない場合のみ。このシステム全体を使用し、多くのユーザーがいる場合は、おそらくこのディレクトリの作成adduserを、ユーザーを作成するために使用しているものに追加する必要があります。いずれにせよ、ほとんどの人は信頼できるマシンでVimを使用しています(ただし、コメントは良いものです)。
マーティントゥルノイ

存在しない場合のみ修正してください。これは、システムの一時ディレクトリにあるため、それらの一時ファイルがいつクリーンアップされるかに基づいて予測不能に発生します。なぜそれを$HOMEどこかに置いていないのかわからない。
デロバート

@derobertまあ、/var/別のファイルシステムです。理論は、それが上の書き込みの多くを防ぐことができますこと、である//usrまたは/home、より少ないフラグメンテーション&クラッシュした場合のファイルの破損のリスクにつながる...これは、メールボックスとものが上にある理由もある/var中で、デフォルトではなく、 HOMEDIR ...
マーティンTournoij
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.