web-dev-qa-db-ja.com

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

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

215
jrdioko

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

*~

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

*.swp
*.swo

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

グローバルに実行する場合は、自宅で.gitignoreファイルを作成し(他の名前または場所を指定できます)、次のコマンドを使用できます。

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

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

360
nunopolonia

または、vimを設定して、スワップファイルを別の場所に保存することもできます。 .vimrcファイルに次のような行を追加します。

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

詳細は vim tip をご覧ください。

111
martinl

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

つまり、.gitignorecore.excludes$GIT_DIR/configには何も入れないでください。代わりに情報を$HOME/.gitconfigに入れてください(nunopoloniaが--globalで示唆しているように)。「グローバル」はシステムごとではなくユーザーごとを意味することに注意してください。

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

22
William Pursell

次のようなファイルを無視することもお勧めします。

.*.swp
.*.swo

.swpで終わるファイルがある場合があるため

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

vimがバックアップファイルに他のフォルダーを使用するようにするには(たとえば、/tmp):

set bdir-=.
set bdir+=/tmp

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

set dir-=.
set dir+=/tmp

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

:h bdir
:h dir
5
Andrew_1510

ここ は、スワップファイル拡張子を生成する実際の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]

これは VIM のgithub独自のgitignoreファイルに含まれているものです。

他の人が正しく指摘しているように、この.gitignoreは 。svg 画像ファイルと 。swf Adob​​eフラッシュファイルも無視します。

3
rouble

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

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

表示することもできます ここ

3
SnapShot
# 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マシンおよび「ショートネーム」オプションがオンの場合、「。」元のファイル名は「_」に置き換えられます。
  • このファイルが既に存在する場合(たとえば、クラッシュから回復する場合)、警告が表示され、別の拡張子「.swo」、「。swn」などが使用されます。
  • 既存のファイルは上書きされません。
  • スワップファイルは、Vimがファイルの編集を停止するとすぐに削除されます。

「。」の置き換えMS.

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

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

2
user31986

確かに、

プロジェクトのホームディレクトリに「.gitignore」を作成し、含める必要があります。

*.swp

それでおしまい

1つのコマンドで

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

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

0
ddwolf