互动
最近评论

在 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-sessionkill-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 -sessionnew-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)

  • 虚拟交换机桥接到物理网卡

  • 虚拟机获得真实 IP(来自 DHCP 或静态设定)

  • 可以访问内网、外网、被其他设备 ping 到

  • 宿主和虚拟机可以互访

✅ 推荐用于:

  • 部署服务、Docker、模拟真实服务器

  • 与其他物理机通信(局域网)


2. 内部(Internal)= Host-Only 网络

  • 虚拟交换机仅连接宿主机和虚拟机

  • 没有公网访问能力(除非宿主机转发 NAT)

  • 通常 VM IP 是 192.168.x.x(默认 DHCP 由宿主提供)

✅ 适用于:

  • 开发测试

  • 本地服务调试(Web 服务等)


3. 专用(Private)= 仅 VM 通信网络

  • 宿主机也不能访问虚拟网络

  • 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

平淡之外, 追求美好, 生活裕如

Rust 库简洁介绍(1)
自动化发布与版本变更(1)
自动化发布与版本变更(2)
linux net books
Jujutsu 使用手册(附 Git 对比)
Rust 依赖管理及其配置
VMware 共享目录/剪贴板/文件拖拽
TT Muncher macro!
rustup toolchain error
SNATvsDNAT
你好啊!我是
Unic
Web3-Focused && Full stack Software Engineer
Proficient in Rust, TypeScript
Blockchain Integration
Smart Contract
Open-Source Contributions
最近发布
最新评论
引用到评论