PowerShell下vim编辑文件时产生的额外文件
文章目录
- 环境
- 背景
- 额外文件
- a.txt~
- .a.txt.un~
- .a.txt.swp
- vim配置文件
- 其它
环境
- Windows 11 专业版
- PowerShell 7.5.2
- vim 9.1
背景
我在PowerShell 7.5.2下通过 choco install vim
命令安装了vim。
在使用vim的过程中,经常会发现有一些奇怪的文件。比如,使用vim编辑“C:\temp\a.txt”文件。查看该文件所在目录,发现有以下文件:
PS C:\temp> ls -ForceDirectory: C:\tempMode LastWriteTime Length Name
---- ------------- ------ ----
-a-h- 2025/08/26 星期二 23:25:17 12288 .a.txt.swp
-a--- 2025/08/26 星期二 22:01:05 964 .a.txt.un~
-a--- 2025/08/26 星期二 22:01:05 10 a.txt
-a--- 2025/08/26 星期二 21:59:33 5 a.txt~
注:这里 ls
命令加上了 -Force
选项,表示显示隐藏文件(类似于Linux下的 ls -a
命令),因为本例中, .a.txt.swp
是一个隐藏文件。
问题来了,除了 a.txt
,另外几个文件是干吗的?
a.txt~
.a.txt.un~
.a.txt.swp
(隐藏文件)
额外文件
a.txt~
该文件是所编辑文件的备份文件,也就是“上一次”保存的文件。
例如,打开 a.txt
,做一些修改,然后保存。vim会在保存新内容之前,将旧的内容复制一份,重命名为 a.txt~
。
这样,如果不小心保存了错误的修改,甚至删除了文件内容,就可以通过该备份文件来“找回”上一次保存的状态。
相关的vim设置:
:set backup
: 开启备份功能(默认通常是开启的):set nobackup
: 关闭备份功能:set backupext=.bak
: 更改备份文件的后缀,例如改成.bak
,那么生成的文件就会是a.txt.bak
:set backupdir=$HOME/vimfiles/backup//
:设置统一的备份目录
注意:设置备份目录时,最后加上 //
,表示把备份文件命名为 <xxxxx>a.txt~
,其中 <xxxxx>
是源文件路径的变体。例如,对于 C:\temp\a.txt
,其备份文件名为 C%%temp%a.txt~
。由于不同目录下可能会有同名文件,采取这种做法可以避免同名的备份文件相互覆盖的问题。
注意:设置的备份目录如果不存在,则保存文件时会报错:
所以,要确保目录存在且有权限写入。
.a.txt.un~
该文件保存了修改的历史信息。这样,即使关闭了vim再重新打开某个文件,仍然可以使用 u
命令来撤销上一次编辑会话中的操作。
相关的Vim设置:
:set undofile
: 开启持久化撤销功能(默认通常是开启的):set noundofile
: 关闭持久化撤销功能:set undodir=$HOME/vimfiles/undo//
:设置统一的撤销文件目录(注:若目录不存在,保存文件时也不会报错,只是不会生成撤销文件了)
同理,设置撤销文件目录时,最后面要加上 //
。
注意:撤销文件虽然以 .
开头,但并不是隐藏文件。Windows不像Linux那样,以 .
开头的文件就是隐藏文件,而是文件被设置了“隐藏”属性。
.a.txt.swp
和Linux下的vim类似,当vim正在编辑一个文件时,会自动产生一个swap文件。此时如果其他用户尝试编辑该文件时,就会给出提示:
E325: 注意
发现交换文件 ".a.txt.swp"日期: 2025-08-27 15:08:35文件名: C:/temp/a.txt修改过: 否用户名: Administrator 主机名: FQ-20240219CHGS进程 ID: 5492 (还!在!运!行!)
正在打开文件 "a.txt"日期: 2025-08-26 23:48:37(1) 另一个程序可能也在编辑同一个文件。如果是这样,修改时请注意避免同一个文件产生两个不同的版本。退出,或者小心地继续。
(2) 上次编辑此文件时崩溃。如果是这样,请用 ":recover" 或 "vim -r a.txt"恢复修改的内容 (请见 ":help recovery")。如果你已经进行了恢复,请删除交换文件 ".a.txt.swp"以避免再看到此消息。交换文件 ".a.txt.swp" 已存在!
以只读方式打开([O]), 直接编辑((E)), 恢复((R)), 退出((Q)), 中止((A)):
注意:swap文件是一个隐藏文件。在PowerShell下,用 ls
命令查看文件时,需要加上 -Force
选项。
注:要在资源管理器里显示隐藏文件,需要在文件夹选项里选择“显示隐藏的文件、文件夹和驱动器”:
vim配置文件
前面提到的设置,是在打开vim后,在命令模式下(也就是 :
开头的指令)所做的设置。这些设置仅对当前vim会话有效。
如果希望持久化设置,则需要修改vim的配置文件。
注:可通过在vim里运行 :echo $MYVIMRC
命令查看配置文件的路径。例如,我的vim配置文件是 C:\tools\vim\_vimrc
。
编辑该文件,比如:
set nobackup
set noundofile
或者:
set backup
set backupdir=$HOME/vimfiles/backup//set undofile
set undodir=$HOME/vimfiles/undodir//
注意,要确保目标目录存在,为此可以在前面加上检查和创建目标目录的逻辑。
其它
vim配置文件的其它常见设置:
set nu
:显示行号set encoding=utf-8
:vim内部工作时的编码set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
:vim尝试识别文件编码的顺序