互动
最近评论

在 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 libs day0
RUST Language Virtual Machine Learning digest
Consensus algorithms
UUPS contract
zustand
Handle Errors
Learn about rust marcos
More about Foundry tools
Rust with Algorithms and Crypto
How to verify a contract
你好啊!我是
Unic
Web3-Focused && Full stack Software Engineer
Proficient in Rust, TypeScript
Blockchain Integration
Smart Contract
Open-Source Contributions
最近发布
最新评论
引用到评论