<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post/13336/</link>
<title><![CDATA[[实践OK]ansible下hosts配置中的yml文件中的host文件注释方法]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[DevOps开发运维]]></category>
<pubDate>Wed, 01 Apr 2026 08:15:34 +0000</pubDate> 
<guid>https://jackxiang.com/post/13336/</guid> 
<description>
<![CDATA[ 
	```<br/>ansible如何注释掉yaml中的host 10.71.59.14:：<br/>&nbsp;&nbsp;&nbsp;&nbsp;# Elasticsearch<br/>&nbsp;&nbsp;&nbsp;&nbsp;sec_weekly_log_elastic:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Elastic服务器<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vars:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;project: sec_weekly_log_elastic<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app: es<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sec_weekly_log_elastic_sjq:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hosts:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.71.59.14:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app: sec_weekly_log_elasticsearch<br/>```<br/><br/><br/>这个问题很简单，但要注意 **YAML 语法层级**，否则很容易写错。<br/><br/>---<br/><br/># ✅ 正确做法（直接注释 host）<br/><br/>你现在的结构：<br/><br/>```yaml<br/>hosts:<br/>&nbsp;&nbsp;10.71.59.14:<br/>&nbsp;&nbsp;&nbsp;&nbsp;app: sec_weekly_log_elasticsearch<br/>```<br/><br/>---<br/><br/>## 🥇 推荐写法（完整注释这个主机块）<br/><br/>```yaml<br/>hosts:<br/>&nbsp;&nbsp;# 10.71.59.14:<br/>&nbsp;&nbsp;#&nbsp;&nbsp; app: sec_weekly_log_elasticsearch<br/>```<br/><br/>---<br/><br/># 🧠 为什么必须“整块注释”<br/><br/>因为 YAML 是**缩进结构语言**：<br/><br/>👉 如果你只注释一行：<br/><br/>```yaml<br/>hosts:<br/>&nbsp;&nbsp;# 10.71.59.14:<br/>&nbsp;&nbsp;&nbsp;&nbsp;app: sec_weekly_log_elasticsearch&nbsp;&nbsp; ❌ 会报错<br/>```<br/><br/>👉 解析会变成：<br/><br/>```yaml<br/>hosts:<br/>&nbsp;&nbsp;app: sec_weekly_log_elasticsearch<br/>```<br/><br/>👉 直接炸（结构错）<br/><br/>---<br/><br/># 🥈 更优雅方式（推荐长期用）<br/><br/>👉 不用注释，直接**挪到 disabled group**<br/><br/>---<br/><br/>```yaml<br/>all:<br/>&nbsp;&nbsp;children:<br/>&nbsp;&nbsp;&nbsp;&nbsp;sec_weekly_log_elastic:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sec_weekly_log_elastic_sjq:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hosts:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 生产<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 10.71.59.14:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sec_weekly_log_elastic_disabled:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hosts:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.71.59.14:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app: sec_weekly_log_elasticsearch<br/>```<br/><br/>---<br/><br/>👉 好处：<br/><br/>* 不破坏结构<br/>* 可随时恢复<br/>* 可单独操作 disabled 组<br/><br/>---<br/><br/># 🥉 另一种方式（最工程化）<br/><br/>👉 用变量控制是否生效：<br/><br/>```yaml<br/>hosts:<br/>&nbsp;&nbsp;10.71.59.14:<br/>&nbsp;&nbsp;&nbsp;&nbsp;app: sec_weekly_log_elasticsearch<br/>&nbsp;&nbsp;&nbsp;&nbsp;enabled: false<br/>```<br/><br/>然后 playbook：<br/><br/>```yaml<br/>when: hostvars[inventory_hostname].enabled &#124; default(true)<br/>```<br/><br/>---<br/><br/># ⚠️ 最常见错误总结<br/><br/>&#124; 错误写法&nbsp;&nbsp;&nbsp;&nbsp;&#124; 问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>&#124; ------- &#124; -------- &#124;<br/>&#124; 只注释 IP&nbsp;&nbsp;&#124; YAML结构破坏 &#124;<br/>&#124; 留下子字段&nbsp;&nbsp; &#124; 解析异常&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>&#124; 注释缩进不一致 &#124; 直接报错&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/><br/>---<br/><br/># 📌 一句话总结<br/><br/>&gt; **YAML 中“注释主机”必须把 host 及其所有子字段一起注释，否则会破坏结构。**<br/><br/>---<br/><br/>如果你后面要做：<br/><br/>👉 “批量上下线主机（几十台）”<br/><br/>我可以帮你设计一套：<br/><br/>* enabled 开关机制<br/>* 按环境/机房自动过滤<br/>* 不用手动注释<br/><br/>这在你这种运维场景会非常实用。<br/>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post/13310/</link>
<title><![CDATA[[实践OK]vim中只想删光标字母并写个一个字符替换的最快捷方式是？改整个 IP（重点）。改变量 / 域名（最常用）]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[DevOps开发运维]]></category>
<pubDate>Wed, 18 Mar 2026 06:49:59 +0000</pubDate> 
<guid>https://jackxiang.com/post/13310/</guid> 
<description>
<![CDATA[ 
	在 Vim 里，你这个需求本质是：**“删除当前字符并立即输入一个新字符”**，最短路径如下：<br/><br/>---<br/><br/>### ✅ 最快：`r`<br/><br/>```vim<br/>rX<br/>```<br/><br/>👉 含义：<br/><br/>* `r` = replace（替换当前光标所在字符）<br/>* `X` = 你要替换成的字符<br/><br/>---<br/><br/>### 🎯 示例<br/><br/>光标在 `a` 上：<br/><br/>```text<br/>cat<br/> ^<br/>```<br/><br/>输入：<br/><br/>```vim<br/>rb<br/>```<br/><br/>结果：<br/><br/>```text<br/>cbt<br/> ^<br/>```<br/><br/>---<br/><br/>### ⚡ 为什么这是最快的<br/><br/>* 不进入插入模式（比 `x + i` 少一步）<br/>* 不移动光标<br/>* 单指令完成替换<br/><br/>---<br/><br/>### 🚫 常见但更慢的写法<br/><br/>&#124; 写法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124; 问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br/>&#124; ------- &#124; --------------------------------- &#124;<br/>&#124; `x i X` &#124; 多一步进入插入模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>&#124; `sX`&nbsp;&nbsp;&nbsp;&nbsp;&#124; 会进入 insert mode（适合连续输入，但不适合单字符替换） &#124;<br/><br/>---<br/><br/>### 📌 补充（进阶）<br/><br/>* `R`：进入**连续替换模式**（类似覆盖写）<br/>* `cw`：替换一个单词（不是单字符）<br/><br/>---<br/><br/>如果你平时在做类似“批量改配置 / 改IP / 改域名”的活，我可以给你一套 Vim 高频操作组合（非常适合你现在做 Ansible / 运维场景）。<br/><br/><br/><br/>```<br/>如果你平时在做类似“批量改配置 / 改IP / 改域名”的活，我可以给你一套 Vim 高频操作组合（非常适合你现在做 Ansible / 运维场景）。<br/>```<br/><br/>好，这类“改配置 / 改 IP / 改域名”的场景，本质是**高频重复编辑 + 模式化替换**，在 Vim 里可以做到非常高效。下面给你一套**实战型组合拳**（偏运维 / Ansible 场景）：<br/><br/>---<br/><br/># 一、全局替换（最核心）<br/><br/>### ✅ 批量改 IP / 域名<br/><br/>```vim<br/>:%s/10&#92;.75&#92;.17&#92;.15/10.75.17.25/g<br/>```<br/><br/>👉 要点：<br/><br/>* `%` = 全文件<br/>* `g` = 一行中全部替换<br/>* `.` 必须转义<br/><br/>---<br/><br/>### ✅ 带确认（防误伤）<br/><br/>```vim<br/>:%s/src&#92;.old&#92;.com/src.new.com/gc<br/>```<br/><br/>👉 每次替换前确认（y/n/a/q）<br/><br/>---<br/><br/>### ✅ 只替换匹配行<br/><br/>```vim<br/>:g/nginx/s/80/8080/g<br/>```<br/><br/>👉 只在包含 `nginx` 的行里替换端口<br/><br/>---<br/><br/># 二、可视块批量改（改多行同一列）<br/><br/>👉 运维改配置神器（比如改一列 IP）<br/><br/>### 操作步骤：<br/><br/>```text<br/>Ctrl + v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 进入块模式<br/>选中多行列<br/>Shift + i&nbsp;&nbsp;&nbsp;&nbsp; # 插入<br/>输入内容<br/>Esc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 批量生效<br/>```<br/><br/>---<br/><br/>### 🎯 示例<br/><br/>批量在行首加 `#`：<br/><br/>```text<br/>server1<br/>server2<br/>server3<br/>```<br/><br/>操作后：<br/><br/>```text<br/>#server1<br/>#server2<br/>#server3<br/>```<br/><br/>---<br/><br/># 三、宏（解决重复操作）<br/><br/>👉 适合“结构一样但不能纯替换”的场景<br/><br/>### 录制宏：<br/><br/>```vim<br/>qa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 录制到寄存器 a<br/>...操作...<br/>q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 结束<br/>```<br/><br/>### 执行：<br/><br/>```vim<br/>@a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 执行一次<br/>10@a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 执行10次<br/>```<br/><br/>---<br/><br/>### 🎯 示例（改 hosts 格式）<br/><br/>```<br/>10.1.1.1 test1<br/>10.1.1.2 test2<br/>```<br/><br/>改成：<br/><br/>```<br/>test1 ansible_host=10.1.1.1<br/>```<br/><br/>👉 用宏比手动快 10 倍<br/><br/>---<br/><br/># 四、正则增强（精准匹配）<br/><br/>### ✅ 匹配 IP<br/><br/>```vim<br/>:%s/&#92;v&#92;d+&#92;.&#92;d+&#92;.&#92;d+&#92;.&#92;d+/REPLACED/g<br/>```<br/><br/>---<br/><br/>### ✅ 交换 IP 和主机名<br/><br/>```vim<br/>:%s/&#92;v(&#92;S+)&#92;s+(&#92;S+)/&#92;2 ansible_host=&#92;1/<br/>```<br/><br/>👉 非常适合你做 Ansible inventory<br/><br/>---<br/><br/># 五、多文件批量处理（运维高频）<br/><br/>### ✅ 打开多个文件<br/><br/>```bash<br/>vim *.ini<br/>```<br/><br/>### ✅ 批量执行替换<br/><br/>```vim<br/>:argdo %s/old/new/ge &#124; update<br/>```<br/><br/>👉 含义：<br/><br/>* `argdo`：对所有文件执行<br/>* `e`：忽略错误<br/>* `update`：有修改才保存<br/><br/>---<br/><br/># 六、快速改“当前词”（最常用）<br/><br/>### ✅ 改当前单词<br/><br/>```vim<br/>ciw<br/>```<br/><br/>👉 删除当前词并进入插入模式<br/><br/>---<br/><br/>### ✅ 全文替换当前词<br/><br/>```vim<br/>:%s/&lt;C-r&gt;&lt;C-w&gt;/new/g<br/>```<br/><br/>👉 `&lt;C-r&gt;&lt;C-w&gt;` = 当前光标单词<br/><br/>---<br/><br/># 七、跳转 + 修改（提速关键）<br/><br/>### ✅ 快速跳到下一个并改<br/><br/>```vim<br/>n + .<br/>```<br/><br/>👉 含义：<br/><br/>* `n`：下一个匹配<br/>* `.`：重复上次修改<br/><br/>---<br/><br/>### 🎯 场景<br/><br/>1. `/8080` 搜索<br/>2. `r9` 改成 9090<br/>3. `n . n . n .`<br/><br/>👉 秒级批量修改<br/><br/>---<br/><br/># 八、删除 IP（你之前那个问题的正解）<br/><br/>```vim<br/>diW<br/>```<br/><br/>👉 删除整个“WORD”（含点号的 IP）<br/><br/>---<br/><br/># 总结（给你一个运维优先级）<br/><br/>最值得掌握的 5 个：<br/><br/>1. `:%s///g` —— 全局替换<br/>2. `Ctrl+v` —— 块编辑<br/>3. `ciw` —— 改单词<br/>4. `.` —— 重复操作<br/>5. `:argdo` —— 多文件处理<br/><br/>---<br/><br/>如果你愿意，我可以**专门给你定制一套：Ansible / inventory / nginx / hosts 文件的 Vim 快速编辑模板**，直接贴你现在的文件结构，我帮你把操作路径优化到“最少按键数”。<br/><br/><br/>```<br/>专门给你定制一套：Ansible / inventory / nginx / hosts 文件的 Vim 快速编辑模板，我只是修改单个文件时间较多，想最少步骤实现vim操作文件罢了。<br/>```<br/><br/>明白，你的目标不是“炫技”，而是**单文件场景下最少按键数完成修改**。那我给你一套**极简操作模型（偏运维高频场景）**，只保留真正有用的。<br/><br/>基于 Vim，下面这些就是“效率上限组合”。<br/><br/>---<br/><br/># 一、核心原则（先建立思维模型）<br/><br/>你所有操作可以压缩成 3 类：<br/><br/>1. **就地改**（不移动光标）<br/>2. **跳一下 + 改**<br/>3. **一次改 + 无限复用（.）**<br/><br/>---<br/><br/># 二、最少按键的“就地修改”<br/><br/>### ✅ 改一个字符（你刚问的）<br/><br/>```vim<br/>rX<br/>```<br/><br/>---<br/><br/>### ✅ 改整个 IP（重点）<br/><br/>```vim<br/>ciW<br/>```<br/><br/>👉 比 `diW + i` 少一步<br/><br/>---<br/><br/>### ✅ 改变量 / 域名（最常用）<br/><br/>```vim<br/>ciw<br/>```<br/><br/>👉 例如：<br/><br/>```<br/>server_name old.com;<br/>```<br/><br/>光标在 `old.com` → `ciw new.com`<br/><br/>---<br/><br/>### ✅ 改到行尾（改 nginx 特别多）<br/><br/>```vim<br/>C<br/>```<br/><br/>👉 等价于 `c$`<br/><br/>---<br/><br/>### ✅ 改引号/括号内内容（高级但高频）<br/><br/>```vim<br/>ci&quot;<br/>ci&#039;<br/>ci)<br/>ci]<br/>```<br/><br/>👉 例如：<br/><br/>```nginx<br/>proxy_pass &quot;http://old&quot;;<br/>```<br/><br/>光标在里面 → `ci&quot;` → 输入新地址<br/><br/>---<br/><br/># 三、跳一下 + 改（比全局替换更快的场景）<br/><br/>### ✅ 改下一个匹配（极高频）<br/><br/>```vim<br/>/old<br/>```<br/><br/>然后：<br/><br/>```vim<br/>n + .<br/>```<br/><br/>---<br/><br/>### 🎯 实战（改多个 IP）<br/><br/>1. `/10.75`<br/>2. `ciW 10.52.14.86`<br/>3. 然后：<br/><br/>```vim<br/>n . n . n .<br/>```<br/><br/>👉 比 `:%s` 更安全（避免误伤）<br/><br/>---<br/><br/># 四、可控替换（比宏更轻量）<br/><br/>### ✅ 当前词全局替换（极推荐）<br/><br/>```vim<br/>:%s/&lt;C-r&gt;&lt;C-w&gt;/new/g<br/>```<br/><br/>👉 你只需要：<br/><br/>* 光标放在旧词上<br/>* 一条命令搞定<br/><br/>---<br/><br/># 五、删除类（你之前问过的延伸）<br/><br/>### ✅ 删除 IP（最优）<br/><br/>```vim<br/>diW<br/>```<br/><br/>---<br/><br/>### ✅ 删除等号右边（配置文件神器）<br/><br/>```vim<br/>d$<br/>```<br/><br/>---<br/><br/>### ✅ 删除到某字符<br/><br/>```vim<br/>dt=<br/>```<br/><br/>👉 删除到 `=` 前（不包含）<br/><br/>---<br/><br/># 六、重复操作 = 效率核心<br/><br/>### ✅ 万能键<br/><br/>```vim<br/>.<br/>```<br/><br/>👉 规则：<br/><br/>&gt; 你只需要“认真做一次”，剩下全靠 `.`<br/><br/>---<br/><br/>### 🎯 示例（改多行端口）<br/><br/>第一行：<br/><br/>```vim<br/>ciw 8080<br/>```<br/><br/>后面：<br/><br/>```vim<br/>j . j . j .<br/>```<br/><br/>---<br/><br/># 七、你这个场景最优“组合拳”（总结版）<br/><br/>### 👉 改 IP<br/><br/>```vim<br/>ciW + .<br/>```<br/><br/>---<br/><br/>### 👉 改域名<br/><br/>```vim<br/>ciw + .<br/>```<br/><br/>---<br/><br/>### 👉 改整行配置<br/><br/>```vim<br/>C<br/>```<br/><br/>---<br/><br/>### 👉 改多个但不想误伤<br/><br/>```vim<br/>/xxx → n → 修改 → n .<br/>```<br/><br/>---<br/><br/>### 👉 批量但精准<br/><br/>```vim<br/>:%s/old/new/gc<br/>```<br/><br/>---<br/><br/># 八、给你一个“运维最短路径口诀”<br/><br/>&gt; **能 `ciw` 就别 `x+i`<br/>&gt; 能 `.` 就别重复敲<br/>&gt; 能 `/ + n` 就别手找<br/>&gt; 能 `ci&quot;` 就别删整行**<br/><br/>---<br/><br/>如果你再往上走一步（进阶优化），可以给你做两件事：<br/><br/>1. **定制 `.vimrc`（专门适配你这种运维编辑习惯）**<br/>2. **把常用操作压缩成 1~2 个快捷键（比如一键改 IP）**<br/><br/>你可以把你现在常改的 nginx / inventory / hosts 文件贴一段，我可以帮你把操作路径再压缩一半。<br/>
]]>
</description>
</item>
</channel>
</rss>