如何在Vim中另存为新文件并继续在原文件上工作?

396
无论何时使用:sav命令,它都会将文件另存为新名称并在Vim中打开新文件。
是否有可能将文件另存为新名称但保留原始文件以供编辑?

40
我来提出相反的问题。 - cambunctious
11
@cambunctious 我也是。我正在谷歌上搜索“vim另存为”,这个问题教会了我有一个:saveas命令,与我的期望一样:将现有文件另存为新名称并打开新文件。 - Jacktose
很好的补充!顺便说一下,你可以使用:sav缩写,当覆盖现有文件时也有:sav!选项。 - André Willik Valenti
4个回答

570

使用 :w 命令并带上文件名:

:w other_filename

92
另外,使用 :w %:h/other_filename 将内容写入与当前打开文件相同目录下的指定文件。 - loevborg
3
@Ioevborg,什么情况下不是这样?我刚刚在没有阅读你的评论的情况下执行了“:w fname”命令,这种行为似乎是默认的。 - Blake
13
@Cokemonkey11,vim的默认行为不是将当前文件所在的位置设置为工作目录。你可能在你的vimrc文件中添加了一些代码来实现这个功能。有关更多信息,请参见http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file - Derek
9
我刚刚确认了一下,如果没有"%:h/",文件将被保存在你打开vim时所在的目录,而不是原始文件所在的地方。 - RVC
10
提到一下:w other_filename这条命令会将数据写入仅限于other_filename文件,而不是当前文件,这可能会有所帮助。 - Ram Patra
显示剩余3条评论

297

谢谢您的回答,现在我知道Vim有两种“SAVE AS”的方式。

假设我正在编辑hello.txt。

  • :w world.txt 将hello.txt的内容写入world.txt文件,同时保持hello.txt作为vim中打开的buffer。
  • :sav world.txt 先将hello.txt的内容写入world.txt文件,然后关闭hello.txt buffer,最后将world.txt作为当前buffer打开。

29
:sav 命令不会关闭初始缓冲区,而是会隐藏它。默认情况下,隐藏的缓冲区会被卸载,但可以通过设置 'hidden' 或 'bufhidden' 选项来覆盖此行为。 - ZyX
7
没问题,是的...:sav 更接近我所知道的 "另存为"。 - skytreader
9
来自 Vim 帮助文档的内容是::sav[eas][!][++opt] {file}。因此,:sav:saveas 的缩写。而 :w 则是 :[range]w[rite][!][++opt] {file} 的快捷方式。这些信息都可以在手册中找到,就在上下几行之处。 - Atcold

28

保存新文件后按下

Ctrl-6

这是切换到另一个文件的快捷方式


2
说句题外话,在 OS X 10.10.5 下使用 nvim 0.1.0,这需要按 SHIFT-CTRL-6。 - Aaron Mendez
1
在 OS X 11 上的 Homebrew 版本 Vim 中,shift-ctrl-6。 - Mateusz Piotrowski

6
以下命令将在新窗口中创建一个副本。这样您就可以继续查看原始文件和新文件。
:w {newfilename} | sp #

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接