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

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.dtcms.com/a/353693.html

相关文章:

  • 北京先智先行科技:揭秘先知大模型的创新力量
  • 泰山区委书记张培峰率队考察深兰科技张江新总部,加速推进AI产业投资落地
  • 【AI论文】MV-RAG:检索增强的多视图扩散模型
  • Linux IPTables
  • 7、prefix-tuning、P-tuning、Prompt-tuning
  • 大规模5G无线通信网络
  • 服务器关机故障排查:大白话版笔记
  • 软件定义汽车(SDV)调试——如何做到 适配软件定义汽车(SDV)?(上)
  • R包fastWGCNA - 快速执行WGCNA分析和下游分析可视化
  • 【Mascaret】QGIS中Mascaret插件的使用
  • JAVA 引用类型深拷贝的三种实现方式
  • (48)华为云平台-rpa-安全组限制端口+ip
  • (一)光头整洁架构(Mediator Pattern/Result Patttern/UnitOfWork/Rich Domain)
  • docker部署spring boot,安装jdk17、maven3.8.8详细步骤
  • 【C++】菱形继承深度解析+实际内存分布
  • 【题解】Codeforces Round 1045 (Div. 2) Problem.B ~ Problem.E
  • KANO 模型:功能不是“加一分”,而是“分五类”
  • YOLO-yaml/pt模型文件的差异
  • GitFlow工作流
  • 铠德科技为您详解静电与温冲背后的隐形损失
  • 下一代防火墙
  • nestjs 导出excel
  • JoyAgent-JDGenie开源多智能体系统详解:架构、部署与企业级应用案例
  • day22 回溯算法part01
  • Day6--HOT100--238. 除自身以外数组的乘积,41. 缺失的第一个正数,73. 矩阵置零
  • 前端漏洞(下)- ClickJacking漏洞
  • 指针 (六):sizeof和strlen细节强化之“做题篇”
  • stl--std::map
  • Java 使用Jna 调用 C# dll文件踩到的坑
  • SpringBoot整合Redis:从入门到实战的完整指南