gitはvim一時ファイルを無視します


238

すべてのディレクトリでvimによって生成された一時ファイルをgitに無視させる正しい方法は何ですか(システム全体で、または単一のプロジェクトのローカルで)。


6
パターン*.sw?は標準を解決します.swpが、のような代替スワップファイル拡張子も解決します.swo
buley

7
@buleyあなたの提案も.swfファイルを無視します。特にFlashアプリを作成している場合は、そうしないことを強くお勧めします。
スティーブンマードック

1
@marflar良い点。.ただし、隠しファイルを前に付けた同じパターンは、それを防ぐはずです。
ブーリー2014年

今日も.swxを見ました。
リチャード

2
16個のバックアップファイルを作成した後に(という実験ショー.tmp.swp.tmp.swo、...、 .tmp.swa)、Vim が作成されます.tmp.svz。私は後に何が.tmp.saa起こる.tmp.rzzかを見る忍耐力に欠けています-多分?更新:ソース(src/memline.c、関数findswapname())を見ると、.saa「E326:見つかったスワップファイルが多すぎます」というエラーで中止されます。
キーストンプソン

回答:


392

Vimの一時ファイルは〜で終わるので、ファイルに次.gitignoreの行を追加できます

*~

Vimは、swpおよびswo拡張子を持つスワップファイルも作成します。それらを削除するには、次の行を使用します。

*.swp
*.swo

これは、単一のプロジェクト内のすべてのvim一時ファイルを無視します

グローバルに行う場合は、ホームに.gitignoreファイルを作成し(別の名前や場所を指定できます)、次のコマンドを使用します。

git config --global core.excludesfile ~/.gitignore

次に、無視したいファイルをそのファイルに追加するだけです


30
Vimは連続して名前が付けられたスワップファイル(.swp、.swoなど)を作成するので.*.sw*、自分の.gitignore中でそれらをすべて非表示にするために使用します。
ドリュースティーブンス、

32
@DrewStephens、私は.*.sw?もっと正確だと思います。(私は人々がいくつかの変種を使用し*.sw*て、私が本当に明白な何かを欠いていると疑っているのを見ましたが...)
Morten Siebuhr

10
よると@Morten vimdoc.sourceforge.net/htmldoc/recover.html、。*。sの?? Unixでそれらすべてをキャッチします(.s ??は.swpから.saaにデクリメントします)。
Max Nanasy 2012

6
@MatrixFrogの優れたコメントを少し拡張するだけです-この質問はvimのためのものなので、そのプロジェクト正しい.gitignoreをここで見つけることができます。
SnapShot

17
注意してください。github .*.s[a-w][a-z].svgファイルを無視します。
Jon

118

または、たとえば次のような行を.vimrcファイルに追加することにより、スワップファイルを別の場所に保存するようにvimを構成できます。

set backupdir=$TEMP//
set directory=$TEMP//

詳細は、このvimのヒントを参照してください。


8
Mac OS Xでは$TMPDIR、実際のtempdirを取得するために使用できます:)
Alex Moore-Niemi '11年

5
優先ディレクトリの後にダブルスラッシュを付けると(〜/ tmp //を使用します)、フルパスを格納することでファイル名の衝突を防ぎます。これにより、2つのディレクトリにあるconfig.xmlなどの名前のファイルを同時に編集することができます。
Brian

1
どういう$TEMP意味ですか?
テーマフィールド2018年

set undodir=$TEMP//永続的なundoファイルも保存するため、も追加する必要がありました。
Micah Lindstrom

24

これは、リポジトリごとではなく、ユーザーごとにのみ実行する必要があります。Joeがemacsを使用する場合、彼はemacsバックアップファイルを無視することを望みますが、Betty(viを使用する)はviバックアップファイルを無視することを望みます(多くの場合、それらは類似していますが、約24,893の一般的なエディターが存在し、かなりですさまざまなバックアップ拡張機能をすべて無視しようとするのはばかげています。)

言い換えれば、中に何も入れていない.gitignoreかでcore.excludesの中で$GIT_DIR/config$HOME/.gitconfig代わりに情報を入力してください(nunopoloniaがで示唆して--globalいるように)。「グローバル」とは、システムごとではなくユーザーごとの意味です。

システム全体ですべてのユーザーの構成を希望する場合(必要ありません)、別のメカニズムが必要になります。(おそらく、リポジトリーの初期化の前にテンプレートをセットアップします。)


3
どうやら、BettyはJoeよりもはるかに賢いです:-)私はmartinlからの回答を使用することになりました(GitではなくVimで修正する)にもかかわらず、良いアドバイスと投票に値します。
paxdiablo


5

「git commit」の前にvimを終了します。

作るためにvim(バックアップファイル、ために他のフォルダを使用する/tmp例):

set bdir-=.
set bdir+=/tmp

vimが.swpファイルの現在のフォルダーの使用を停止するようにするには:

set dir-=.
set dir+=/tmp

-=, +=vimにはbdirとdirの他のデフォルトがあるため、使用は一般的には適切です。すべてをクリアする必要はありません。bdir、dirの詳細については vimのヘルプを確認してください。

:h bdir
:h dir

5
vimスワップファイルを格納する場所に注意してください。:あなたは誤って編集しているファイルから資格情報やその他のデータを漏らす可能性がsecurity.stackexchange.com/questions/65883/...
Mnebuerquo

5

次に、スワップファイル拡張子を生成する実際のVIMコードを示します。

/* 
 * Change the ".swp" extension to find another file that can be used. 
 * First decrement the last char: ".swo", ".swn", etc. 
 * If that still isn't enough decrement the last but one char: ".svz" 
 * Can happen when editing many "No Name" buffers. 
 */
if (fname[n - 1] == 'a')        /* ".s?a" */
{   
    if (fname[n - 2] == 'a')    /* ".saa": tried enough, give up */
    {   
        EMSG(_("E326: Too many swap files found"));
        vim_free(fname);
        fname = NULL;
        break;  
    }
    --fname[n - 2];             /* ".svz", ".suz", etc. */
    fname[n - 1] = 'z' + 1;
}
--fname[n - 1];                 /* ".swo", ".swn", etc. */

これにより、次の形式のスワップファイルが生成されます。

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

これは、github独自のVIM用gitignoreファイルに含まれているものとほぼ同じです。

他の人が正しく指摘しているように、この.gitignoreは.svg画像ファイルと.swf adobe flashファイルも無視します。


3

これはgitがvimによって作成された一時ファイルを無視することになることがわかりました:

[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~

こちらからもご覧いただけます


5
また.swf、フラッシュアプ​​リを作成するたびにポップアップし続ける厄介なファイルも無視します。
スティーブンマードック

Flashファイルをチェックインする必要のない開発者でない限り、これは問題なく動作します:-)
paxdiablo

1
これは.svg、問題になる可能性があるものを無視します。
ブルーノブロノスキー

1
*.un~あなたが持っているので、それを含めることは冗長です*~
Bruno Bronosky '26 / 10/26

2

承知しました、

プロジェクトのホームディレクトリに ".gitignore"を作成し、

*.swp

それでおしまい

1つのコマンドで

project-home-directory$ echo '*.swp' >> .gitignore

4
echo *.swp >> .gitignore以前の.gitignoreのオーバーライドを避ける方が良いと思います。
Cesar A. Rivas

2
シェルに「*」を展開させたくない。したがって、使用echo '*.swp' >> .gitignore
編集

また、これらの>文字の1つを誤って見逃したくない場合もあります。私は一度passwdファイルにそれを行った後、ログアウトしました:-)
paxdiablo

2
# VIM: Temperory files
*~

# VIM: Swap-files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]

# VIM: Commands :cs, :ctags
tags
cscope.*

# VIM session
Session.vim

# VIM: netrw.vim: Network oriented reading, writing, browsing (eg: ftp scp) 
.netrwhist

スワップファイルの名前は通常、編集中のファイルと同じで、拡張子は「.swp」です。

  • Unixでは、「。」編集されたファイルと同じディレクトリにあるファイル名をスワップするために付加されます。これにより、スワップファイルがディレクトリリストに表示されなくなります。
  • MS-DOSマシンで、「shortname」オプションがオンの場合、「。」元のファイル名の「_」に置き換えられます。
  • このファイルがすでに存在する場合(たとえば、クラッシュから回復する場合)、警告が表示され、「。swo」、「。swn」などの別の拡張子が使用されます。
  • 既存のファイルが上書きされることはありません。
  • スワップファイルは、Vimがファイルの編集を停止するとすぐに削除されます。

「。」の置き換え '_'は、MS-DOS互換ファイルシステム(例:crossdos、multidos)の問題を回避するために使用されます。

http://vimdoc.sourceforge.net/htmldoc/recover.html

http://www.vim.org/scripts/script.php?script_id=1075


0

myyの場合、一時ファイルは以前のアクションによってすでにコミットされているため、.gitignoreを変更しても、コミットされたファイルには影響しません... git rm files_to_be_ignored --cache最初に、次にコミットし、次にDONEを実行する必要があります。


0

これは、Alex Moore-Niemiが指摘したMacで動作します。

set backupdir=$TMPDIR//
set directory=$TMPDIR//

使用TMPDIRしないでくださいTEMPDIR


-4

ソース管理を使用している場合。vim一時ファイルはまったく役に立ちません。
そのため、それらを作成しないようにvimを構成したい場合があります。

〜/ .vimrcを編集して次の行を追加してください:

set nobackup
set noswapfile

6
ソース管理は、バックアップまたはVimのスワップファイルと同じ粒度で動作しません。保存のたびに(または特定の文字数または秒数の後でコミットした場合でも、Vimのスワップファイルが提供する内容の簡略化)、ソース管理されていないファイル(バックアップの編集)を編集する可能性が高いです。とスワップファイルはまだ望ましいです)。
Chris Johnsen、2011年

8
VIM一時ファイルは、エディターのクラッシュやその他のいくつかの理由で非常に役立ちます。それらをオフにすると、赤ちゃんがお風呂の水で捨てられます。
ブライアンリーマン、2011年

5
@Arnis Say、停電?または、何らかの理由でXセッションを終了させます。vim一時ファイルは非常に重要なIMOです。
jrdioko、2011年

1
@jrdioko Xのクラッシュが、使用したいscreen(またはdtach、すべての画面機能を必要としない)理由です。停電はUPSによって処理されます。バックアップは、{すべての重要なファイルをバックアップするためのお気に入りのソフトウェア}によって行われます。既に編集されているファイルをバックアップしようとすると、通知を受け取るためにスワップファイルを使用します。バックアップでN + 1位にしても、ファイルに害を与えたり元に戻したりすることはできません。永続的な取り消しが便利だからです。元に戻すファイルのみが私にとって少し重要です。
ZyX 2011年

5
一時ファイルを完全にオフにするよりも、別の場所に保存するようにvimに指示する方がよいでしょう。
カイル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.