在Vim中禁用交换文件创建


216

有没有办法.swp在vim中禁用文件创建?或至少将它们全部创建在一个地方,以便我可以轻松找到和删除它们。

当我同时编辑时复制父目录时,我发现它们特别烦人。当然,我知道我可以使用find -exec查找和删除它们。但是我想要一个更实用的解决方案。



Answers:


255

要在vim中禁用交换文件,请输入

:set noswapfile

要永久禁用交换文件,请在~/.vimrc文件中添加以下内容

set noswapfile

有关更多详细信息,请参见swapfile上Vim文档。


6
如果您的编辑器崩溃(掉电等),则交换文件非常有用,请记住。
koonse'3

1
另一个选择仍然是使用交换文件,但是将其保留在内存中,因此它不会继续写入硬盘。这不能保护您在中断期间不会丢失文件,但是如果您在另一个vim中打开同一文件,它将立即告诉您。命令为:set directory = / dev / shm
webbertiger

trusktr的答案使您可以在解决OP的问题的同时保留交换文件的优点。
jpaugh

从vim内部,您还可以在打开文件时禁用交换文件::noswapfile edit /path/to/file
TorkelBjørnson-Langen18年

我个人关于数据丢失的理念是DBAB,并经常保存...
Samy Bencherif

156

在.vimrc或/ etc / vimrc中设置以下变量,以使vim将交换,备份和撤消文件放在一个特殊的位置,而不是要编辑的文件的工作目录中:

set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//

在路径中使用双尾斜杠告诉vim在避免名称冲突的地方启用功能。例如,如果您在一个位置中编辑一个文件,而在另一个位置中编辑另一个文件,并且两个文件都具有相同的名称,则您不希望在〜/ .vim / swap /中发生名称冲突。如果在〜/ .vim / swap //后面加上两个斜杠,vim将使用正在编辑的文件的整个路径来创建交换文件,以避免冲突(文件路径中的斜杠将被百分号%代替)。

例如,如果您编辑/path/one/foobar.txt和/path/two/foobar.txt,那么您将在〜/ .vim / swap /中看到两个名为%path%one%foobar.txt的交换文件。和%path%two%foobar.txt。


您还可以添加一些信息,即保存的备份文件可能会保存devs外观
Bartek Skwira 2014年

评论:(不是批评),这似乎主要是对开发来说是件好事,因为对于许多人来说,读取文件和进行小的编辑或不重要的笔记保留(这是vim使用的很大一部分),似乎可以省去一份额外的bookeeper工作。我个人希望所有工作都没有交换或其他自动备份。如果我真的要开发的东西,我宁愿有一个比较高层次的框架来保护我,最好用代码版本控制等
ĴRIV

@LelaDax是的,在大多数情况下,这些文件几乎没有用,因为我将git用作所有源代码。不过,在极少数情况下(如坠机事故),它们派上了用场。但是实际上,撤消历史记录我经常使用。与查看git commits来查看以前的历史记录相比,快速导航要容易得多。gundo使导航撤消树变得轻松而轻松。我可以没有交换和备份文件。
trusktr

26
仅供参考,对于新手(例如我哈哈...),您必须转至〜/ .vim /并自行创建目录。它不会自动为您创建它们。
2015年

1
您也可以在vimrc中编写一些代码来自动为您创建文件夹,这是我在我的工作中所做的。因此,在新系统上,我只得到了vimrc,其余的工作都由我来完成。
trusktr

42

我在这里找到了答案:

vim -n <file>

打开没有交换文件的文件。

此外:

set dir=/tmp

in在中.vimrc创建交换文件/tmp


怎么样的*.ext~备份文件?是否有任何命令行选项也可以禁用它们?
Salman von Abbas

这对于那些一次性的大文件非常有用!谢谢。
费利佩·阿尔瓦雷斯

28

这是我的个人〜/ .vimrc备份设置

" backup to ~/.tmp 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set backupskip=/tmp/*,/private/tmp/* 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set writebackup

13

我同意那些质疑为什么vim在没有其他文本编辑器困扰的情况下为什么需要所有这些“灾难恢复”内容的观点。我不想在编辑时vim在编辑文件的目录中创建任何其他文件,非常感谢。为此,我_vimrc要禁用交换文件,并将烦人的“备份”文件移到Temp目录中:

" Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
"set nobackup

" Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
set backupdir=C:\Windows\Temp

" Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
set noswapfile

9
我认为其他编辑者不打扰它的事实对其他编辑者的影响较差,而不是对vi(m)的反映较差。将同一目录设置为放置这些文件的默认位置的选择有些不幸,尽管至少可以辩解。(例如,在多服务器,高度交叉安装的环境中,当您最迫切需要恢复文件时,在哪里可以找到恢复文件可能并不明显)
Domingo Ignacio 2012年

3
Vim的swapfile处理非常糟糕。我用它来恢复丢失的数据可能是5次。但是我一直在麻烦地恢复大约9000次交换文件,无论如何它总是与文件相同,或者更糟的是过时的版本。如果恢复过程不那么糟糕,这可能是个好功能。recovery.vim会有所帮助,但仍然过于互动。
joeytwiddle

3
崇高文字有disaster recovery。我喜欢它!当我恢复所做的任何更改(无论是否保存)时,都无需备份文件,甚至无需保存文件。
leetNightshade 2014年

我有一个简单的自动命令,可以在进行所有更改后立即写入所有更改,从而使交换文件和备份都无用。
tbodt

2
@TorkelBjørnson-Langen重启我的机器而不关闭我的所有Vim会话,然后对哪些恢复文件实际上有效感到疑惑可能是我的错。无论如何,我试图通过编写一个仅在未保存的编辑时维护交换文件的插件来获得两全其美:vim-swap-is-awesome.vim
joeytwiddle

7

您可以将backupdir和directory设置为null以便完全禁用交换文件,但是通常建议将它们简单地放在集中目录中。Vim会确保没有名称冲突或类似名称;因此,这是一个完全安全的选择:

set backupdir=~/.vim/backup/
set directory=~/.vim/backup/

3
您应该//在路径末尾添加双斜杠,以便可以同时修改两个具有相同名称的文件。
塞缪尔·奥马利

谢谢,@ SamuelO'Malley。//是做什么的?
monokrome '19

看一下 :help directory是否要阅读此文档。双斜杠告诉vim将文件的完整路径编码为交换文件的名称,例如%home%sam%dotfiles%.gitignore.swp,而不是just .gitignore.swp
塞缪尔·奥马利


3

如果您正在使用git,则可以添加*.swp.gitignore


我认为这就是大多数用户所需要的!关闭交换文件是不好的做法。
DenisKolodin '16

2

不为特定文件创建vim交换文件

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile

1
或对于特定目录中的所有文件,以下似乎有效(仅简短测试):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty

1

对于尝试为Rails项目设置此设置的任何人,请添加

set directory=tmp,/tmp

进入你的

~/.vimrc

因此,.swp文件将位于其自然位置-tmp目录(每个项目)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.