什么是让 git 忽略所有目录中 vim 生成的临时文件的正确方法(无论是全局的系统还是本地的单个项目)?
12 回答
Vim 临时文件以 ~ 结尾,因此您可以在文件中添加.gitignore
该行
*~
Vim 还创建具有 swp 和 swo 扩展名的交换文件。删除那些使用以下行:
*.swp
*.swo
这将忽略单个项目中的所有 vim 临时文件
如果你想全局做,你可以在你家创建一个 .gitignore 文件(你可以给它其他名称或位置),并使用以下命令:
git config --global core.excludesfile ~/.gitignore
然后,您只需将要忽略的文件添加到该文件
或者,您可以配置 vim 以将交换文件保存到单独的位置,例如通过在文件中添加类似于以下内容的行.vimrc
:
set backupdir=$TEMP//
set directory=$TEMP//
有关更多信息,请参阅此vim 提示。
这应该只在每个用户的基础上完成,而不是每个存储库。如果 Joe 使用 emacs,他会希望忽略 emacs 备份文件,但 Betty(使用 vi)会希望忽略 vi 备份文件(在许多情况下,它们是相似的,但现有大约 24,893 个通用编辑器,而且很漂亮试图忽略所有各种备份扩展是荒谬的。)
换句话说,不要将任何东西放入.gitignore
或core.excludes
放入$GIT_DIR/config
。而是将信息放入$HOME/.gitconfig
(正如 nunopolonia 建议的那样--global
)。请注意,“全局”是指每个用户,而不是每个系统。
如果您想为所有用户(您不需要)跨系统进行配置,您将需要不同的机制。(可能在存储库初始化之前使用模板设置。)
我还建议考虑忽略以下文件:
.*.swp
.*.swo
因为您可能有以结尾的文件.swp
这是生成交换文件扩展名的实际 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 文件中包含的内容。
在“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)出现问题。
我发现这会让 git 忽略 vim 创建的临时文件:
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~
也可以在这里查看。
当然,
只需在项目的主目录上创建一个“.gitignore”并且必须包含
*.swp
就是这样
在一个命令中
project-home-directory$ echo '*.swp' >> .gitignore
在我的情况下,临时文件已经由以前的操作提交,所以修改 .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