ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Tmux终端复用器:从核心概念到高效工作流实战指南

Tmux终端复用器:从核心概念到高效工作流实战指南 1. 项目概述为什么你需要Tmux如果你经常在终端里工作无论是管理服务器、写代码还是跑一个需要长时间运行的任务那你一定遇到过这样的场景开了一堆终端标签页突然网络闪断或者不小心关掉了终端窗口所有正在运行的进程和状态瞬间消失那种感觉就像辛苦搭建的积木被一脚踢翻。又或者你需要同时查看日志、编辑配置文件、运行测试手忙脚乱地在多个窗口间切换效率低下。Tmux就是为解决这些问题而生的终端复用神器。它不是一个花哨的图形界面工具而是一个运行在命令行下的“窗口管理器”。你可以把它理解为一个虚拟的终端容器在这个容器里你可以创建多个窗口Window和窗格Pane并且最重要的是这个容器的会话Session可以与你本地的终端客户端分离Detach。这意味着你可以在办公室的电脑上启动一个Tmux会话运行一个需要编译一整晚的大型项目然后直接关掉电脑回家。回到家后你只需要重新连接到家里的电脑再“附着”Attach回那个Tmux会话你会发现编译进程还在继续终端里的所有内容包括光标位置、命令历史都和你离开时一模一样。这不仅仅是“防断线”那么简单。它彻底改变了你使用终端的工作流。你可以将不同的任务分配到不同的窗口比如1号窗口写代码2号窗口跑服务3号窗口看日志。在每个窗口里你还可以用窗格进行水平或垂直分割同时操作多个终端视图。所有这一切都通过一套高效、纯粹的键盘快捷键来操控让你的双手无需离开键盘主区就能完成所有窗口管理操作效率提升是肉眼可见的。对于运维工程师、后端开发者、数据科学家或者任何需要深度使用命令行的人来说Tmux是提升生产力、保障工作连续性的必备工具。2. Tmux核心概念与架构拆解在深入快捷键和命令之前我们必须先理解Tmux的三个核心概念会话Session、窗口Window和窗格Pane。这是理解Tmux所有操作逻辑的基石。2.1 会话、窗口与窗格的三层结构你可以把Tmux的架构想象成一个树状结构会话Session这是最顶层的容器代表一个完整的工作环境。一个Tmux服务器可以同时管理多个会话。例如你可以有一个叫“web-dev”的会话专门做网页开发另一个叫“data-analysis”的会话做数据分析。会话之间完全独立互不干扰。会话最大的特性就是可以分离detach和附着attach这是实现“工作持久化”的关键。窗口Window每个会话内部可以包含多个窗口。窗口就像图形界面下的一个完整标签页Tab它占据整个终端屏幕。你可以在不同窗口间切换每个窗口运行不同的任务。例如在“web-dev”会话中窗口0用来编辑代码窗口1用来启动本地开发服务器窗口2用来运行Git命令。窗格Pane每个窗口内部可以分割成多个窗格。窗格是终端屏幕的一个子区域允许你在同一个屏幕视图下同时运行多个终端进程。你可以水平分割上下两个窗格或垂直分割左右两个窗格并且可以任意调整窗格大小。例如在编辑代码的窗口里你可以左边窗格用Vim写代码右边窗格直接运行测试。这种“会话 - 窗口 - 窗格”的三层结构提供了极大的灵活性。你可以为每个项目创建一个会话在每个会话中为不同阶段的任务创建窗口在需要多任务并行时在窗口内分割窗格。2.2 前缀键一切操作的触发器Tmux的所有快捷键操作都基于一个核心设计前缀键Prefix Key。默认的前缀键是Ctrlb即先按下Ctrl和b然后松开。这个设计初看可能有点别扭但它意义重大。在普通的终端里Ctrlc,Ctrlz等组合键有系统级的含义中断、挂起进程。如果Tmux直接使用这些组合键来管理自身就会和终端内运行的应用程序产生冲突。因此Tmux引入了一个“模式切换”键你先按Ctrlb告诉Tmux“接下来的一个或一组按键是给你的指令不是给终端里正在运行的程序”。按下前缀键后你再按其他键Tmux就会执行对应的操作。例如Ctrlb然后按%垂直分割当前窗格。Ctrlb然后按水平分割当前窗格。Ctrlb然后按c创建一个新窗口。Ctrlb然后按n切换到下一个窗口。你需要花一点时间来习惯这个“两步操作”但一旦形成肌肉记忆你会发现它非常高效且无冲突。当然如果你实在不习惯前缀键是可以修改的常见的改法是改成Ctrla或Ctrlx我们会在后面配置部分讲到。注意在后续所有描述中Prefix即代表按下默认的Ctrlb。我会用Prefix %这样的形式来表示快捷键组合。3. Tmux安装与基础会话管理3.1 跨平台安装指南Tmux的安装非常简单大多数Linux发行版和macOS都可以通过包管理器一键安装。macOS (使用Homebrew):brew install tmux这是最推荐的方式能方便地管理版本和更新。Ubuntu/Debian:sudo apt update sudo apt install tmuxCentOS/RHEL/Fedora:# CentOS 7/8, RHEL sudo yum install tmux # 或者使用dnf (CentOS 8, Fedora) sudo dnf install tmux离线安装针对无外网服务器: 这是很多运维场景下的实际需求。你需要在一台有网络的、相同或兼容操作系统版本的机器上下载好Tmux及其所有依赖的RPM或DEB包然后拷贝到目标服务器进行安装。对于CentOS/RHEL (使用yumdownloader):# 在有网络的机器上 mkdir tmux-offline cd tmux-offline yum install yum-utils # 如果还没安装 yumdownloader --resolve tmux # 这会下载tmux及其所有依赖包到当前目录。将它们打包传到目标服务器。 # 在目标服务器上进入包所在目录 rpm -Uvh *.rpm对于Ubuntu/Debian (使用apt-get download):# 在有网络的机器上 mkdir tmux-offline cd tmux-offline apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances tmux | grep -v ^ | sort -u) # 将下载的所有.deb包拷贝到目标服务器然后 sudo dpkg -i *.deb实操心得离线安装前务必确认目标服务器的系统架构uname -m通常是x86_64和发行版版本cat /etc/os-release确保下载的包完全兼容否则很容易出现依赖地狱。建议先在虚拟机上用相同版本的系统测试一遍。3.2 会话的生命周期从创建到销毁安装好后在终端输入tmux即可启动一个新的Tmux会话并自动附着到它。你会注意到终端底部出现了一个状态栏通常显示会话名、窗口列表等信息。现在我们来学习如何管理会话。创建新会话:tmux new -s session_name-s参数用于指定会话名称。给会话起一个有意义的名字如project-alpha,server-monitor非常重要便于后续管理。如果不加-sTmux会以数字编号命名如0, 1, 2...。分离当前会话: 在Tmux会话内部按下Prefix d即Ctrlb然后按d。你会立刻回到启动Tmux之前的原始终端界面但刚才的Tmux会话以及其中运行的所有程序都在后台安静地继续执行。列出所有会话:tmux ls # 或 tmux list-sessions这会显示所有存在的Tmux会话包括它们的名称、附加的窗口数、会话创建时间以及是否被附着。附着到现有会话:tmux attach -t session_name # 或简写 tmux a -t session_name-t参数指定目标会话。如果你只有一个会话可以直接运行tmux attach。在会话间切换内部命令: 如果你已经附着在一个会话里想切换到另一个会话无需先分离。可以使用内部命令Prefix s: 会显示一个会话列表用方向键选择回车进入。Prefix (和Prefix ): 直接切换到上一个或下一个会话。重命名会话:在会话外部tmux rename-session -t old_name new_name在会话内部Prefix $然后输入新名称。终止会话:在会话内部直接输入exit或按Ctrld关闭最后一个窗格和窗口会话会自动终止。在会话外部tmux kill-session -t session_name如果你想关闭所有窗格但保留会话比如清理现场可以在会话内用命令tmux kill-window -a杀死除当前窗口外的所有窗口。4. 窗口与窗格的高效操作详解掌握了会话管理你就拥有了“工作持久化”的能力。接下来我们要在会话内部进行高效的多任务编排这依赖于对窗口和窗格的熟练操作。4.1 窗口操作像管理浏览器标签页一样窗口是任务分组的基本单位。以下是最常用的窗口操作快捷键Prefix c:创建一个新窗口。新窗口会获得一个递增的编号。Prefix n: 切换到下一个窗口。Prefix p: 切换到上一个窗口。Prefix 0...Prefix 9: 直接切换到编号为0-9的窗口。这是最快速的切换方式。Prefix w: 打开一个交互式的窗口列表显示所有窗口的预览可以用方向键选择并切换。非常直观。Prefix ,:重命名当前窗口。给窗口起个描述性的名字如“editor”, “log-tail”, “db-shell”比看数字编号要清晰得多。Prefix :关闭当前窗口会要求确认。Prefix .: 修改当前窗口的编号。有时你想重新排序窗口顺序时会用到。实操心得我个人的习惯是将最常用的窗口固定在编号0或1。例如0号窗口永远是编辑器或主要工作区。这样无论开了多少其他临时窗口我都可以用Prefix 0瞬间回到主战场思路不会被打断。4.2 窗格操作一屏多用的艺术窗格是Tmux效率的精华所在。你可以在一个屏幕内同时观察日志输出、编辑代码、运行命令。创建窗格:Prefix %:垂直分割当前窗格右侧出现新窗格。Prefix :水平分割当前窗格下方出现新窗格。Prefix Ctrl%和Prefix Ctrl(部分版本支持): 按屏幕中心进行垂直/水平分割能快速得到均匀的布局。在窗格间移动焦点:Prefix 方向键 (上/下/左/右): 这是最直观的方式按方向键切换到相邻窗格。Prefix o: 按顺序切换到下一个窗格。Prefix ;: 切换到上一个活动的窗格在最近使用的两个窗格间切换。调整窗格布局: Tmux内置了几种预设的窗格布局可以快速重新排列现有窗格。Prefix Space: 在几种预设布局如even-horizontal, even-vertical, main-horizontal, main-vertical, tiled间循环切换。当你创建了多个窗格后用这个快捷键可以快速找到最顺眼的排列。调整窗格大小: 这是精细调整界面时必须掌握的。按住Prefix不放然后按方向键可以以1个单元格为单位调整当前窗格的边界。Prefix Ctrl方向键: 以5个单元格为单位调整速度更快。Prefix Alt方向键(需要终端支持): 以1个单元格为单位调整但更通用。关闭与操作窗格:Prefix x:关闭当前窗格会弹出确认提示。你也可以在窗格内直接输入exit或按Ctrld。Prefix z:最大化/还原当前窗格。这是一个超级实用的功能当你需要暂时专注查看某个窗格的内容比如看一段很长的日志时按Prefix z当前窗格会瞬间放大到填满整个窗口隐藏其他所有窗格。再看一次Prefix z恢复原状。比调整大小方便多了。Prefix !: 将当前窗格拆分为一个独立的新窗口。当你发现某个窗格里的任务变得足够重要需要单独一个窗口时这个操作非常方便。Prefix {和Prefix }:向左/向右交换当前窗格的位置。4.3 窗格同步输入批量操作的利器这是一个高级但极其有用的功能同步窗格。当你需要在多个窗格中执行完全相同的命令时例如同时在多台服务器的相同目录下执行git pull它可以节省大量时间。进入同步模式Prefix :进入命令模式输入setw synchronize-panes on回车。现在你在任何一个窗格中输入的任何字符都会同步到当前窗口下的所有窗格。你可以看到所有窗格的光标都在动输入的命令和结果完全一致。关闭同步Prefix :输入setw synchronize-panes off。警告此功能需谨慎使用尤其是在窗格里运行交互式程序如Vim或带有删除/覆盖性质的操作时同步输入可能导致灾难性后果。我的经验是只在执行简单的、只读的或确认安全的命令时开启并且操作完成后立即关闭。5. 复制模式与缓冲区管理在普通终端里你可以用鼠标轻松选择和复制文本。但在Tmux中由于它接管了终端默认的鼠标选择可能失效或者你根本就是在无图形界面的服务器上工作。这时Tmux内置的复制模式就成了你查看历史输出和复制文本的唯一利器。5.1 进入与使用复制模式Prefix [进入复制模式。此时你可以用方向键、PageUp/PageDown、Ctrlu/Ctrld半页等键在终端历史缓冲区中自由滚动查看之前已经滚出屏幕的内容。在复制模式下移动光标到你想复制的文本起始处按Space键开始选择。然后移动光标此时选择区域会高亮到文本结束处按Enter键完成复制。被复制的文本会存入Tmux的粘贴缓冲区。按q或Esc可以退出复制模式。5.2 粘贴与缓冲区管理Prefix ]将粘贴缓冲区中的内容粘贴到当前光标位置。这相当于系统的“粘贴”操作。Prefix 列出所有粘贴缓冲区的历史记录。你可以看到一个列表选择其中一条历史记录进行粘贴。Tmux默认会保存多个复制内容。Prefix -删除最近使用的粘贴缓冲区内容。5.3 更高效的复制-粘贴工作流与系统剪贴板集成默认情况下Tmux的复制粘贴只在它自己的多个窗格/窗口间有效与操作系统的剪贴板是隔离的。这很不方便。我们需要打通这个隔阂。对于macOS和Linux带X11或Wayland通常需要借助一个外部工具如xclip(X11) 或wl-copy/wl-paste(Wayland)并在Tmux配置中启用相关设置。一个常见的配置在~/.tmux.conf中如下它利用reattach-to-user-namespace(macOS) 或xclip(Linux) 实现与系统剪贴板的互通# 对于 macOS set -g default-command reattach-to-user-namespace -l $SHELL # 设置复制到系统剪贴板的快捷键绑定 # 使用 vi 风格的键绑定更高效 setw -g mode-keys vi # 绑定 Prefix y 将选择的内容复制到系统剪贴板 bind -T copy-mode-vi v send-keys -X begin-selection bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel pbcopy # macOS # 对于 Linux (使用 xclip)可能是xclip -in -selection clipboard # 绑定 Prefix Y 将整行复制到系统剪贴板 bind Y run-shell tmux save-buffer - | pbcopy # macOS配置好后你的工作流变为Prefix [进入复制模式。按v进入可视选择模式vi风格移动光标选择文本。按y所选文本不仅存入Tmux缓冲区还会自动进入系统剪贴板。在任何地方包括浏览器、其他应用都可以用Cmdv(macOS) 或Ctrlv(Linux/Windows) 粘贴。注意事项与系统剪贴板的集成是Tmux配置中最容易出问题的地方之一因为它高度依赖于你的操作系统、终端模拟器和安装的工具。如果配置后不生效需要逐一检查1) 相关工具如pbcopy,xclip是否已安装2) 终端模拟器是否允许访问系统剪贴板3) Tmux配置语法是否正确。6. 个性化配置与性能调优默认的Tmux已经很强大了但通过配置文件~/.tmux.conf进行定制才能让它真正贴合你的使用习惯达到“人键合一”的境界。6.1 基础配置示例以下是一个功能丰富的基础配置示例你可以直接复制到你的~/.tmux.conf文件中然后通过Prefix :输入source-file ~/.tmux.conf重新加载配置或者重启Tmux会话生效。# 基础设置 # 设置前缀键为 Ctrl-a比默认的 Ctrl-b 更容易按个人习惯可选 # set -g prefix C-a # unbind C-b # bind C-a send-prefix # 设置从按前缀键到按命令键之间的时间毫秒设短一点反应更快 set -sg escape-time 10 # 启用鼠标支持可以鼠标点击切换窗格/窗口调整窗格大小 set -g mouse on # 设置终端颜色支持为256色或真彩色让主题和状态栏更美观 set -g default-terminal screen-256color # 或者如果你的终端支持真彩色 # set -ga terminal-overrides ,xterm-256color:Tc # 设置窗口和窗格的索引从1开始而不是0更符合直觉 set -g base-index 1 setw -g pane-base-index 1 # 重载配置文件快捷键Prefix r bind r source-file ~/.tmux.conf \; display 配置文件已重载 # 状态栏美化 # 状态栏刷新间隔秒 set -g status-interval 2 # 状态栏左侧显示会话名和窗口列表 set -g status-left #[fggreen]#S #[fgwhite]| #I:#W # 状态栏右侧显示时间、日期、电池如果支持 set -g status-right #[fgcyan]%Y-%m-%d %H:%M:%S #[fgyellow]#(battery) # 设置状态栏背景和前景色 set -g status-style fgwhite,bgblack # 设置活动窗口的状态栏样式 setw -g window-status-current-style fgblack,bggreen,bold # 窗格边框与视觉 # 设置活动窗格的边框颜色便于识别 set -g pane-active-border-style fggreen,bgdefault set -g pane-border-style fgwhite,bgdefault # 快捷键优化 # 分割窗格的快捷键更直观| 和 - bind | split-window -h -c #{pane_current_path} bind - split-window -v -c #{pane_current_path} # 注意上面的 -c 参数确保新窗格在当前目录打开非常实用 # 用 Prefix h/j/k/l 在窗格间移动vim风格 bind -r h select-pane -L bind -r j select-pane -D bind -r k select-pane -U bind -r l select-pane -R # 用 Prefix Ctrl-h/j/k/l 调整窗格大小vim风格 bind -r Ctrl-h resize-pane -L 5 bind -r Ctrl-j resize-pane -D 5 bind -r Ctrl-k resize-pane -U 5 bind -r Ctrl-l resize-pane -R 5 # 快速跳转到最后一个窗口Prefix bind last-window6.2 插件管理TPM的强大生态Tmux的插件社区非常活跃通过Tmux Plugin Manager (TPM) 可以轻松管理。插件能实现主题美化、保存会话、电池显示等高级功能。安装TPM:git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm配置插件在~/.tmux.conf末尾添加:# 列出要管理的插件 set -g plugin tmux-plugins/tpm set -g plugin tmux-plugins/tmux-sensible # 一套合理的默认配置 set -g plugin tmux-plugins/tmux-resurrect # 保存/恢复会话的神器 set -g plugin tmux-plugins/tmux-continuum # 自动保存会话 set -g plugin dracula/tmux # 一个流行的主题 # 对于 tmux-resurrect 和 continuum set -g resurrect-capture-pane-contents on # 保存窗格内容 set -g continuum-restore on # 开机自动恢复上次会话 # 初始化TPM必须放在配置文件最后 run ~/.tmux/plugins/tpm/tpm使用TPM:保存~/.tmux.conf文件。在Tmux中按Prefix I(大写i) 来安装所有列出的插件。按Prefix U更新插件。按Prefix Alt u卸载插件。tmux-resurrect插件尤其强大按Prefix Ctrl-s保存当前所有会话、窗口、窗格的布局和运行的程序状态重启电脑或Tmux后按Prefix Ctrl-r就能一键恢复到保存时的样子连vim里正在编辑的文件和光标位置都能恢复。6.3 性能调优与疑难杂症Tmux通常很轻量但在一些极端场景下如高速滚屏输出、真彩色支持可能会遇到性能问题或显示异常。滚动卡顿如果在一个窗格内运行tail -f logfile这类持续高速输出的命令时感觉滚动卡顿可以尝试在运行命令前在该窗格内临时关闭Tmux的刷新Prefix :输入setw -g c0-change-interval 100数值越大刷新间隔越长越省资源但实时性越差。或者考虑使用less F logfile来查看日志。颜色显示异常确保~/.tmux.conf中的default-terminal设置正确并且你的终端模拟器如iTerm2, Alacritty, GNOME Terminal也正确配置了颜色支持如启用“真彩色”。鼠标选择异常如果你启用了set -g mouse on但鼠标选择文本还是有问题可能是你的终端模拟器或SSH客户端对鼠标事件传递支持不好。可以尝试禁用鼠标模式或者检查终端设置。启动慢如果你的配置加载了很多插件或复杂脚本Tmux启动可能会变慢。可以考虑按需加载插件或者将一些不常用的设置注释掉。7. 实战工作流与高级技巧掌握了基本操作和配置后我们来看看如何将Tmux融入日常开发运维工作流并介绍一些提升效率的高级技巧。7.1 典型工作流示例场景一全栈Web开发启动一个名为dev的会话tmux new -s dev在默认窗口0中用窗格分割左边 (Prefix %) 用Vim/Neovim编辑代码右边运行npm run dev或rails server启动开发服务器。创建新窗口 (Prefix c) 作为“测试窗口”运行单元测试npm test或pytest。创建另一个新窗口作为“数据库窗口”运行psql或mysql客户端。创建第三个新窗口作为“日志窗口”运行tail -f development.log。下班时直接Prefix d分离会话。晚上回家后tmux attach -t dev所有工作现场瞬间恢复。场景二服务器监控与运维SSH登录到生产服务器。启动Tmux会话tmux new -s monitor在窗口0垂直分割三个窗格分别运行htop监控资源、watch -n 1 df -h监控磁盘、tail -f /var/log/syslog监控系统日志。创建窗口1用于应急操作和调试可以运行任意命令。即使SSH连接意外断开监控仍在后台持续运行。重新连接后附着会话即可继续观察。7.2 脚本化与自动化Tmux的强大之处在于它可以通过命令行脚本控制这为自动化打开了大门。通过脚本一键创建复杂工作环境#!/bin/bash # create_dev_env.sh SESSIONmyproject tmux new-session -d -s $SESSION -n editor tmux send-keys -t $SESSION:1 cd ~/projects/myproject nvim C-m tmux new-window -t $SESSION: -n server tmux send-keys -t $SESSION:2 cd ~/projects/myproject npm run dev C-m tmux new-window -t $SESSION: -n shell tmux send-keys -t $SESSION:3 cd ~/projects/myproject C-m tmux select-window -t $SESSION:1 tmux attach-session -t $SESSION运行这个脚本会自动创建一个包含三个预设窗口的Tmux会话并自动在对应窗口启动编辑器、开发服务器和Shell。在Tmux内批量执行命令 利用我们前面提到的同步窗格功能或者结合tmux send-keys命令可以轻松地向多个窗格或窗口发送相同的命令序列用于批量部署、配置更新等。7.3 嵌套Tmux会话有时你可能需要通过一个Tmux会话比如本地连接到远程服务器然后在服务器上又启动了一个Tmux会话。这就形成了嵌套。默认情况下内层的Tmux会“吞噬”所有的快捷键导致你无法操作外层的Tmux。解决方法是为内层Tmux设置不同的前缀键。例如在远程服务器的~/.tmux.conf中设置set -g prefix C-x # 将内层Tmux的前缀改为 Ctrl-x unbind C-b bind C-x send-prefix这样在嵌套会话中按Ctrlb操作外层Tmux按Ctrlx操作内层Tmux互不干扰。8. 常见问题排查与技巧实录即使熟练使用也难免会遇到问题。这里记录了一些常见坑点和解决技巧。问题1按了Prefix键没反应检查你是否在正确的“模式”下如果你正在运行一个全屏程序如Vim、less、htop这些程序会接管键盘输入此时Prefix键是发给这些程序的Tmux收不到。你需要先退出这些程序在Vim中是按Esc然后:q回到普通的Shell提示符下。检查你的前缀键是否被修改了检查~/.tmux.conf中的prefix设置。终极命令在任何情况下Prefix :进入命令模式都是可用的。如果其他键都失效可以试试这个。问题2复制粘贴的内容乱码或格式错乱这通常是因为Tmux缓冲区和系统剪贴板之间的编码或换行符问题。确保你的系统剪贴板工具如pbcopy,xclip和终端编码一致通常是UTF-8。对于Windows下的SSH客户端如PuTTY可能需要额外配置。问题3Tmux状态栏不显示或显示异常首先检查配置中status相关的设置是否被错误地关闭了set -g status off。检查颜色设置。如果终端不支持256色或真彩色状态栏的颜色代码可能导致显示异常。可以暂时将状态栏样式设为简单颜色测试。问题4如何快速查看所有快捷键绑定按Prefix ?可以打开一个包含所有当前快捷键绑定的可滚动列表。这是最好的学习手册。问题5不小心关闭了错误的窗格/窗口怎么办Tmux Resurrect插件是你的后悔药。如果没装插件窗格/窗口一旦关闭其中运行的进程也会终止数据可能丢失。重要习惯在关闭一个包含重要进程的窗格前先确认里面的任务已经完成或保存。对于编辑任务一定要先保存文件再关闭。一个实用技巧快速记笔记在Tmux中你可以快速创建一个临时窗格作为便签本Prefix :输入new-window -n scratch。在这个窗口里你可以用cat note.txt或者直接打开一个简单的编辑器来记录临时信息。用完直接关闭窗口即可无需保存到实际文件。
返回列表