在vim中就地编辑文件

时间:2012-06-15 01:26:20

标签: vim

通常,您实际上并未在vim中编辑文件。如果您运行vim foo,编辑,写入和退出,则vim取消链接foo并创建一个新文件和名为foo的新链接。但是,如果文件有多个链接,那么vim实际上会修改该文件。例如:

$ ls -i foo
19428852 foo
$ vi foo
$ ls -i foo
19428857 foo
$ ln foo bar
$ vi bar
$ ls -i bar
19428857 bar

我一直在寻找一种实际编辑文件的方法,似乎有两种选择。使用ed或使用vim,但请确保在编辑之前至少有两个指向该文件的链接。我想这个问题是学术性的,因为如果只有一个链接,vim创建一个新文件并不重要,如果在编辑过程中创建了链接,vim似乎做了正确的事情,但我很好奇:

是否可以让vim始终编辑文件,而不是创建新文件?

3 个答案:

答案 0 :(得分:9)

查看backupcopy选项的帮助以及crontab上的注释。简短的回答是

:set backupcopy=yes

答案 1 :(得分:2)

诀窍是告诉Vim使用备份文件来允许原始文件被安全覆盖,否则Vim会写入新文件,然后将其重命名以替换原始文件。

然后告诉Vim无处写备份文件。这样常规写入命令将失败,并且必须强制写入。

:set noswapfile
:set backupcopy=yes
:set backupdir=''
:e big
(hit Crtl-C to stopo line count and syntax highlight)
(edit the file)
:w!

要真正了解文件系统级别的内容,我使用了inotify工具:

inotifywait -m -r /path/to/my_test_dir/

但要小心,这对于非常大的文件不起作用,例如,我尝试使用此方法编辑10G文件并最终得到1.5GB的截断文件,其余数据丢失了。 Vim最终使用了近2GB的RAM ......

其他选择是使用MMap功能,例如。在Python命令行中。

答案 2 :(得分:1)

快速谷歌显示此链接 - Editing a hard link to a file。控制它的命令是

set backupcopy=auto,breakhardlink
相关问题