デフォルトでvim
は、スワップファイルはプロジェクトディレクトリに残され、クラッシュ時にはバックアップファイルが残されます。
これを防ぐことはできますか?または、すべてのプロジェクトの.VCSignore
ファイルを更新する必要がありますか?
デフォルトでvim
は、スワップファイルはプロジェクトディレクトリに残され、クラッシュ時にはバックアップファイルが残されます。
これを防ぐことはできますか?または、すべてのプロジェクトの.VCSignore
ファイルを更新する必要がありますか?
回答:
デフォルトでは、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/tmp
Vimがスワップファイルを作成するときに使用しようとするディレクトリのリストの先頭に追加します。末尾//
は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をトリガーしてファイルが変更されたかどうかを確認するまで気付きません。
.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
これは私が私の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
が多いため、使用しています。おそらく、このディレクトリを誰でも書き込み可能にしたくないでしょう。ファイルを開くと、人々はそこにファイルを配置して、潜在的に有害なことをすることができるからです。
adduser
を、ユーザーを作成するために使用しているものに追加する必要があります。いずれにせよ、ほとんどの人は信頼できるマシンでVimを使用しています(ただし、コメントは良いものです)。
$HOME
どこかに置いていないのかわからない。
/var/
別のファイルシステムです。理論は、それが上の書き込みの多くを防ぐことができますこと、である/
、/usr
または/home
、より少ないフラグメンテーション&クラッシュした場合のファイルの破損のリスクにつながる...これは、メールボックスとものが上にある理由もある/var
中で、デフォルトではなく、 HOMEDIR ...
/var/tmp
常に全ユーザーが書き込み可能です。これはシステムの一時ディレクトリです。(そうではないように変更することもできますが、それは、Unixのようなシステムが、壊れた後も断片を保持できることを喜んでいるものの1つです)。システムに別のユーザーがいる場合、そのユーザーは/var/tmp/vim_«your_username»
自分が選択した権限で作成できます。次に、重要なファイルへのシンボリックリンクを入力します。これはおそらくvim tempfilesによって破壊されます。