当前位置: 首页 > ds >正文

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尝试识别文件编码的顺序
http://www.xdnf.cn/news/19087.html

相关文章:

  • 网站防爆破安全策略分析
  • KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战
  • 学习设计模式《二十四》——访问者模式
  • 【数字投影】创新展厅视觉体验,3D Mapping投影全面解读
  • LaTeX论文转word插入mathtype公式
  • C/C++ 数据结构 —— 线索二叉树
  • 【C++】map 容器的使用
  • django配置多个app使用同一个static静态文件目录
  • Android Glide最佳实践:高效图片加载完全指南
  • 滥用Mybatis一级缓存引发OOM问题
  • 网络安全监控中心
  • 阿里云——计算服务深度解析与选型
  • ChatGPT 上线 “学习模式”:全版本开放,重构 AI 教育逻辑
  • 基于单片机步进电机控制电机正反转加减速系统Proteus仿真(含全部资料)
  • 北斗导航|接收机自主完好性监测算法综述
  • java数据类型获取长度方式总结
  • SpringBoot集成 DeepSeek 对话补全功能
  • Spark学习记录
  • Unity 客户端和服务器端 基于网络的账户管理系统
  • 除自身以外数组的乘积是什么意思
  • 【OpenGL】LearnOpenGL学习笔记16 - 帧缓冲(FBO)、渲染缓冲(RBO)
  • 【JUC】——线程池
  • 点评项目(Redis中间件)第一部分Redis基础
  • docker run 后报错/bin/bash: /bin/bash: cannot execute binary file总结
  • 边缘计算:一场由物理定律发起的“计算革命”
  • 预测模型及超参数:2.传统机器学习:PLS及其改进
  • HarmonyOS 高效数据存储全攻略:从本地优化到分布式实战
  • 从 GRIT 到 WebUI:Chromium 内置资源加载与前端展示的完整链路解析
  • AI Agent 发展趋势与架构演进
  • 稳敏双态融合架构--架构师的练就