什么是让 git 忽略所有目录中 vim 生成的临时文件的正确方法(无论是全局的系统还是本地的单个项目)?
*.sw?
解决了标准的 .swp
,但也解决了替代交换文件扩展名,如 .swo
。
.swf
个文件。我强烈反对这样做,特别是如果您正在构建 Flash 应用程序。
.
为前缀的相同模式应该可以防止这种情况发生。
.tmp.swp
、.tmp.swo
、...、.tmp.swa
)后,vim 会创建 .tmp.svz
。我缺乏耐心去看看 .tmp.saa
之后会发生什么——也许是 .tmp.rzz
? 更新:查看源代码(src/memline.c
,函数 findswapname()
),它在 .saa
后放弃并出现错误:“E326:找到太多交换文件”。
Vim 临时文件以 ~ 结尾,因此您可以在文件 .gitignore
中添加该行
*~
Vim 还创建具有 swp 和 swo 扩展名的交换文件。删除那些使用以下行:
*.swp
*.swo
这将忽略单个项目中的所有 vim 临时文件
如果你想全局做,你可以在你家创建一个 .gitignore 文件(你可以给它其他名称或位置),并使用以下命令:
git config --global core.excludesfile ~/.gitignore
然后,您只需将要忽略的文件添加到该文件
或者,您可以配置 vim 以将交换文件保存到单独的位置,例如通过在 .vimrc
文件中添加类似于以下内容的行:
set backupdir=$TEMP//
set directory=$TEMP//
有关详细信息,请参阅此 vim tip。
$TMPDIR
来获取实际的 tempdir :)
$TEMP
是什么意思?
set undodir=$TEMP//
,因为我还保存了持久撤消文件。
这应该只在每个用户的基础上完成,而不是每个存储库。如果 Joe 使用 emacs,他会希望忽略 emacs 备份文件,但 Betty(使用 vi)会希望忽略 vi 备份文件(在许多情况下,它们是相似的,但现有大约 24,893 个通用编辑器,而且很漂亮试图忽略所有各种备份扩展是荒谬的。)
换句话说,不要在 .gitignore
或 $GIT_DIR/config
中的 core.excludes
中添加任何内容。将信息放在 $HOME/.gitconfig
中(正如 nunopolonia 建议的 --global
)。请注意,“全局”是指每个用户,而不是每个系统。
如果您想为所有用户(您不需要)跨系统进行配置,您将需要不同的机制。 (可能在存储库初始化之前使用模板设置。)
我还建议考虑忽略以下文件:
.*.swp
.*.swo
因为您可能有以 .swp
结尾的文件
Here 是生成交换文件扩展名的实际 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 文件。
在“git commit”之前退出 vim。
让 vim
使用其他文件夹来备份文件,(例如 /tmp
):
set bdir-=.
set bdir+=/tmp
使 vim 停止使用当前文件夹存放 .swp 文件:
set dir-=.
set dir+=/tmp
使用 -=, +=
通常会很好,因为 vim 对 bdir, dir 有其他默认值,我们不想全部清除。查看 vim 帮助以获取更多关于 bdir, dir 的信息:
:h bdir
:h dir
# 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
我发现这会让 git 忽略 vim 创建的临时文件:
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~
也可以查看here。
.swf
文件。
.svg
。
*.un~
是多余的,因为您有 *~
当然,
只需在项目的主目录上创建一个“.gitignore”并且必须包含
*.swp
而已
在一个命令中
project-home-directory$ echo '*.swp' >> .gitignore
echo *.swp >> .gitignore
最好避免覆盖以前的 .gitignore。
echo '*.swp' >> .gitignore
>
字符。我曾经对 passwd
文件这样做然后注销:-)
在我的情况下,临时文件已由先前的操作提交,因此修改 .gitignore 不会影响那些提交的文件...,您必须先git rm files_to_be_ignored --cache
,然后提交,然后完成。
正如 Alex Moore-Niemi 所指出的,这适用于 Mac:
set backupdir=$TMPDIR//
set directory=$TMPDIR//
确保使用 TMPDIR
而不是 TEMPDIR
。
如果您正在使用源代码管理。 vim 临时文件毫无用处。因此,您可能希望将 vim 配置为不创建它们。
只需编辑您的 ~/.vimrc 并添加以下行:
set nobackup
set noswapfile
screen
的原因(或者如果他不想要所有屏幕功能,则使用 dtach
)。停电由 UPS 处理。备份由{您最喜欢的备份所有重要文件的软件}完成。当我尝试编辑已编辑的文件时,我使用交换文件来获得通知,备份文件,因为备份的第 N+1 位不会损害和撤消文件,因为持久撤消很方便。只有撤消文件对我来说有点重要。
.gitignore
中使用.*.sw*
将它们全部隐藏。.*.sw?
更准确。 (虽然我见过人们使用*.sw*
的一些变体来怀疑我是那个遗漏了一些非常明显的东西的人......).*.s[a-w][a-z]
将忽略.svg
文件。