提问人:William Pursell 提问时间:6/15/2012 最后编辑:bmarguliesWilliam Pursell 更新时间:11/9/2012 访问量:4285
在 vim 中就地编辑文件
Edit a file in-place in vim
问:
通常,您实际上不会在 vim 中编辑文件。如果运行 、 编辑 、 写入 和 退出,vim 将取消链接并创建一个新文件和一个名为 的新链接。但是,如果文件有多个链接,则实际上会修改文件。例如:vim foo
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
我一直在寻找一种实际编辑文件的方法,似乎有两种选择。使用 ,或者使用,但在我编辑之前确保至少有两个指向文件的链接。我想这个问题是学术性的,因为如果只有一个链接,vim 创建一个新文件并不重要,如果在编辑过程中创建链接,vim 似乎会做正确的事情,但我很好奇:ed
vim
是否可以让 vim 始终编辑文件,而不是创建新文件?
答:
13赞
evil otto
6/15/2012
#1
查看该选项的帮助,特别是有关该选项的说明。简短的回答是backupcopy
crontab
:set backupcopy=yes
评论
1赞
William Pursell
6/15/2012
谢谢。不过,我发现该文档不清楚。“当文件是链接时,新文件将不是链接”。跆拳道??!!每个链接都是一个链接,访问文件的唯一方法就是通过链接!
2赞
Doncho Gunchev
6/15/2012
#2
快速谷歌显示此链接 - 编辑文件的硬链接。控制它的命令是
set backupcopy=auto,breakhardlink
3赞
Tiago
11/9/2012
#3
诀窍是告诉 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 命令行中。
上一个:生成读取错误
下一个:管道中“$?”的正确值是多少?
评论