在 Vim 中实现正则表达式匹配替换主要使用 :s
命令,其核心语法为 :[range]s/正则表达式/替换字符串/[flags]
。以下是具体实现方法和常用技巧:
### 一、基础正则替换命令
1. 全局替换格式
:%s/正则表达式/替换内容/g
- %
表示对整个文件操作
- g
标志替换所有匹配项(默认只替换每行第一个)
例如:将所有 .mp4
替换为 .cache
:
:%s/\.mp4$/.cache/g
\.
转义点字符$
匹配行尾)
2. 范围限定替换
:10,20s/正则/替换/g
仅替换第10-20行
:.,$s/正则/替换/g
从当前行替换到文件末尾
### 二、正则表达式元字符
1. 基础匹配符
- .
匹配任意单个字符
- *
匹配前一个字符0次或多次
- ^
匹配行首$
匹配行尾
- \<
和 \>
匹配单词边界
2. 分组与引用
- \(\)
创建分组,可用 \1
, \2
引用分组内容
例如:交换文件名和扩展名:
:%s/\(.*\)\.\(.*\)/\2.\1/g
(将 name.ext
替换为 ext.name
)
### 三、高级替换技巧
1. 大小写转换
- \L
转换为小写\U
转换为大写
- \l
和 \u
仅转换下一个字符
例如:将所有单词首字母大写:
:%s/\<\w\+/\u&/g
&
代表整个匹配项)
2. 交互式替换
添加 c
标志逐个确认替换:
:%s/正则/替换/gc
操作时按 y
确认n
跳过a
全部替换
### 四、实用示例
1. 删除特定行
:g/^#/d
删除所有以 #
开头的行
g
命令配合正则执行删除)
2. 日期格式标准化
将 2023-12-31
替换为 31/12/2023
:
:%s/\(\d{4}\)-\(\d{2}\)-\(\d{2}\)/\3\/\2\/\1/g
(使用 \d{4}
匹配4位数字)
3. 多行合并
将多行合并为一行(用空格连接):
:%s/\n/ /g
\n
匹配换行符)
> 注意事项:
> 1. 特殊字符需用 \
转义(如 .
*
/
)
> 2. 使用 \v
启用“非常规魔法模式”简化语法(如 \v(\w+)
替代 \(\w\+\)
)
> 3. 替换前建议先通过 /正则表达式
验证匹配结果
操作类型 | CMD(当前会话) | CMD(永久) | PowerShell(当前) | PowerShell(永久) |
---|
设置变量 | set VAR=value
| setx VAR value / setx VAR value /M
| $Env:VAR = 'value'
| [Environment]::SetEnvironmentVariable('VAR','value','User'/'Machine')
|
查看变量 | echo %VAR% / set
| 同左 | $Env:VAR / Get-ChildItem Env:
| 同当前只显示当前,永久改变后重启可识别 |
删除变量 | set VAR=
| REG delete ... 或 setx VAR ""
| $Env:VAR = '' 或 $null
| [Environment]::Set...('VAR','',...)
|
注册表影响延迟 | 无 | 是(需重启/重新登录) | 无 | 是(同上) |
分类 | 快捷键 | 说明 | 英文名 |
---|
基础操作 | Ctrl+b ? | 显示所有快捷键帮助(按q返回) | Show all keybindings help |
| Ctrl+b d | 分离当前会话(退出但不关闭,可通过tmux attach 重新连接) | Detach current session |
| Ctrl+b : | 进入命令模式(输入tmux命令如new-session 、kill-window ) | Enter command mode |
会话管理 | Ctrl+b s | 列出所有会话,按方向键选择并切换 | List all sessions and switch by arrow keys |
| Ctrl+b $ | 重命名当前会话 | Rename current session |
| tmux new -s name | 新建会话(终端中执行,非tmux内快捷键) | Create a new session (executed in terminal) |
| tmux a -t name | 连接指定会话(终端中执行) | Attach to a specific session (executed in terminal) |
| tmux ls | 列出所有会话(终端中执行) | List all sessions (executed in terminal) |
窗口管理 | Ctrl+b c | 新建窗口 | Create a new window |
| Ctrl+b n | 切换到下一个窗口 | Switch to the next window |
| Ctrl+b p | 切换到上一个窗口 | Switch to the previous window |
| Ctrl+b l | 切换到上次使用的窗口(类似浏览器返回) | Switch to the last-used window |
| Ctrl+b w | 列出所有窗口,按编号或方向键选择切换 | List all windows and switch by number/arrow keys |
| Ctrl+b 数字 | 切换到指定编号窗口(如Ctrl+b 0 切换到第0个窗口) | Switch to window by number |
| Ctrl+b , | 重命名当前窗口 | Rename the current window |
| Ctrl+b & | 关闭当前窗口(需按y确认) | Close the current window (confirm with y) |
面板管理 | Ctrl+b " | 水平分割面板(上下分屏) | Split pane horizontally |
| Ctrl+b % | 垂直分割面板(左右分屏) | Split pane vertically |
| Ctrl+b o | 切换到下一个面板(顺时针循环) | Switch to the next pane (clockwise) |
| Ctrl+b 方向键 | 按方向切换到相邻面板(如Ctrl+b ← 切换到左侧面板) | Switch to adjacent pane by direction |
| Ctrl+b x | 关闭当前面板(需按y确认) | Close the current pane (confirm with y) |
| Ctrl+b 空格 | 切换面板布局(循环平铺/主从等预设布局) | Cycle through preset pane layouts |
| Ctrl+b q | 显示面板编号(1秒后消失,按编号可快速切换) | Display pane numbers (disappear after 1s) |
| Ctrl+b z | 当前面板全屏/取消全屏 | Toggle full-screen for current pane |
| Ctrl+b { | 交换当前面板与上一个面板位置 | Swap current pane with previous pane |
| Ctrl+b } | 交换当前面板与下一个面板位置 | Swap current pane with next pane |
| Ctrl+b ! | 将当前面板拆分为独立窗口 | Break pane into separate window |
复制模式 | Ctrl+b [ | 进入复制模式(可滚动查看历史输出) | Enter copy mode |
| q | 退出复制模式 | Exit copy mode |
| 方向键 | 移动光标(复制模式内) | Move cursor (in copy mode) |
| Ctrl+空格 | 开始选择文本(类似Vim的v) | Start text selection |
| Alt+w 或 y | 复制选中文本到tmux缓冲区 | Copy selection to tmux buffer |
| Ctrl+b ] | 粘贴缓冲区内容 | Paste from tmux buffer |
| / | 复制模式内向前搜索(n下一个/N上一个) | Search forward in copy mode |
| ? | 复制模式内向后搜索 | Search backward in copy mode |
其他常用 | Ctrl+b t | 显示时钟(按q关闭) | Display clock (close with q) |
| Ctrl+b Ctrl+b | 发送Ctrl+b到终端(避免快捷键冲突) | Send Ctrl-b to terminal |
---
### 说明:
1. 前缀键机制:所有快捷键均以 Ctrl+b
为前缀,按下后松开再按第二键生效。
2. 自定义前缀键:可在 ~/.tmux.conf
中添加 set -g prefix C-a
将前缀键改为 Ctrl+a
(或其他键),修改后需执行 tmux source-file ~/.tmux.conf
重载配置。
3. Vim风格复制模式:在 ~/.tmux.conf
添加 setw -g mode-keys vi
可启用Vim键绑定(支持 h/j/k/l
移动v
选择y
复制)。
4. 鼠标支持:在 ~/.tmux.conf
添加 set -g mouse on
可启用鼠标操作(调整面板大小、选择窗口等)。
5. 核心操作优先级:建议优先掌握会话分离d
)、窗口管理c/n/p/数字
)、面板分割"/%
)。
> 注:删除了原表格中不标准的 Ctrl+b #
快捷键(实际功能由 Ctrl+b q
覆盖),并修正了命令模式示例new -session
→ new-session
)。完整配置可参考 [tmux手册](https://man.openbsd.org/tmux.1)。
输出当前文件夹为 treeview
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
获取模型列表:
curl https://api.openai.com/v1/models -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json"
对 Hyper-V 中的网络类型(外部/内部/专用)与常见虚拟化平台中的网络模型(桥接/仅主机/NAT)的 对照映射表(mapping table):
✅ Hyper-V 网络类型与常见虚拟化网络模型对照表:
| Hyper-V 网络类型 | 对应模型(VMware/VirtualBox术语) | 网络可达性 | 是否桥接 | 是否共享宿主网络 | 用途举例 |
|------------------|------------------------------------|------------------------------------|----------|------------------|---------------------------------|
| 外部 (External) | 桥接 (Bridged) | VM ↔ 局域网 ↔ 外网 ↔ 宿主机 | ✅ 是 | ✅ 是 | VM 拥有真实 IP,与宿主同网段 |
| 内部 (Internal) | 仅主机 (Host-Only) | VM ↔ 宿主机 | ❌ 否 | ✅ 是 | VM 与宿主通信,无公网访问 |
| 专用 (Private) | 专用网络 (Private/Internal-Only) | VM ↔ VM(宿主机不能访问) | ❌ 否 | ❌ 否 | 多 VM 之间私有隔离通信 |
✅ 说明详解:
1. 外部(External)= 桥接(Bridged)
✅ 推荐用于:
部署服务、Docker、模拟真实服务器
与其他物理机通信(局域网)
2. 内部(Internal)= Host-Only 网络
✅ 适用于:
3. 专用(Private)= 仅 VM 通信网络
宿主机也不能访问虚拟网络
VM 之间互联,但完全隔离
✅ 适用于:
✅ 补充映射图(可视理解):
+--------------------------+-------------------------------+------------------+
| 虚拟网络类型(Hyper-V) | 等价模型(其他平台) | 是否能连外网 |
+--------------------------+-------------------------------+------------------+
| 外部 External | Bridged(桥接) | ✅ 是 |
| 内部 Internal | Host-Only(仅主机) | ❌ 否(默认) |
| 专用 Private | Private(仅虚拟机) | ❌ 否 |
+--------------------------+-------------------------------+------------------+
✅ 类比例子:
场景 | 推荐使用网络类型 |
---|
想让 VM 跟局域网其他电脑通信 | 外部 External |
想让 VM 只和宿主通信,不接触外部网络 | 内部 Internal |
想做一组 VM 之间内部通信、但宿主无法干预 | 专用 Private |
for ip in 10.4.15.{148..152}; do scp -o IdentityFile=~/.ssh/id_ed25519 [需要被传输的文件路径,支持多个] debian@$ip:~/; done
scp 文件至多个机器
目标 | 命令 |
---|
删除本地分支 | git branch -d zyg/PN-259-failover-fix
|
强制删除本地分支 | git branch -D zyg/PN-259-failover-fix
|
删除远程分支 | git push origin --delete zyg/PN-259-failover-fix
|
清理已删除的远程分支痕迹 | git fetch -p
|