Vim 中创建和使用宏的练习指南

这是关于在 Vim 中创建和使用宏的另一份练习指南,目标是帮助您熟悉宏的使用和实践。以下是详细的步骤和说明。

Vim 宏练习指南

目标

通过创建和使用宏来练习编辑任务。

操作步骤

  1. 打开文件
    • 启动命令行并导航到文件所在的目录。
    • 假设文件在 Downloads/vimclass 目录中,使用以下命令:
      cd Downloads
      cd vimclass
      vim macros-practice.txt
      

练习 1:更新旧的 Python 代码

目标:将旧的 Python 代码从 print "Macros are very fun!" 更新为 print("Macros are very fun!")

  • 将光标移动到行 print "Macros are very fun!"
  • 录制宏到 "a" 寄存器:
    qa
    
  • 使用 0 将光标移到行首。
  • 使用 f<SPACE> 定位到空格。
  • 使用 r( 替换空格为开括号。
  • 使用 A) 在行末添加闭括号,按 <ESC> 返回正常模式。
  • 使用 j 移动到下一行。
  • 输入 q 停止录制宏。

检查宏内容

:reg a

应该显示 0f r(A)^[j

执行宏

  • 使用 @a 在下一行执行宏。
  • 继续使用 @@ 重复宏直到所有打印语句被更新。

练习 2:从用户列表创建 Shell 脚本

目标:将用户列表转换为命令。

  • 将光标移动到行 jason
  • 录制宏到 "b" 寄存器:
    qb
    
  • 使用 yaw 将用户名复制到默认寄存器。
  • 使用 I 进入插入模式并输入 passwd -l ,按 <ESC>
  • 使用 A 在行末进入插入模式并输入 && echo,按 <ESC>
  • 使用 p 粘贴用户名。
  • 使用 a 继续在行末输入 >> locked_users.txt,按 <ESC>
  • 使用 j 移动到下一行。
  • 输入 q 停止录制宏。

检查宏内容

:reg b

应该显示 yawIpasswd -l ^[A && echo ^[pa >> locked_users.txt^[j

执行宏

  • 使用 @b 在下一行执行宏,然后使用 3@b 在剩余行重复宏。

练习 3:规范化电话号码

目标:将电话号码从 2798265253 转换为 (279) 826-5253

  • 将光标移动到行 2798265253
  • 录制宏到 "p" 寄存器:
    qp
    
  • 使用 I 进入插入模式并输入 (,按 <ESC>
  • 使用 lll 将光标移动到 9 的下方。
  • 使用 a) 并输入 <SPACE>,按 <ESC>
  • 使用 lll 移动到 6 的下方。
  • 使用 a- 追加一个连字符,按 <ESC>
  • 使用 j 移动到下一行。
  • 输入 q 停止录制宏。

检查宏内容

:reg p

应该显示 I(^[llla) ^[llla-^[j

执行宏

  • 使用 :set nu 启用行号,查看范围。
  • 使用 Ctrl-f 翻页到最后一行,执行:
:25,73 normal @p

练习 4:从日志文件提取重要数据

目标:提取时间戳、源 IP 地址和目标端口。

  • 将光标移动到行 Jan 13 09:57:01
  • 录制宏到 "l" 寄存器:
    ql
    
  • 使用 0 将光标移到行首。
  • 使用 tw 定位到时间戳之后。
  • 使用 dtS 删除到 "SRC=" 的文本。
  • 使用 dw 删除 "SRC"。
  • 使用 r, 替换 "=" 为逗号。
  • 使用 f<SPACE> 移动到 IP 地址后。
  • 使用 d/DPT<ENTER> 删除到 "DPT=" 的文本。
  • 使用 dw 删除 "DPT"。
  • 使用 r, 替换 "=" 为逗号。
  • 使用 f<SPACE> 移动到端口号后。
  • 使用 D 删除剩余文本。
  • 使用 j 移动到下一行。
  • 输入 q 停止录制宏。

检查宏内容

:reg l

应该显示 0twdtSdwr,f d/DPT^Mdwr,f Dj

执行宏

  • 使用 @l 在下一行执行宏,然后使用 @@ 直到所有行格式正确。

练习 5:从多行数据中提取并合并为单行

目标:将三行数据转换为一行。

  • 将光标移动到行 Country China
  • 录制宏到 "c" 寄存器:
    qc
    
  • 使用 0 移动到行首。
  • 使用 dw 删除 "Country"。
  • 使用 j 移动到下一行。
  • 使用 dW 删除数字。
  • 使用 k 移动回原行。
  • 使用 P 粘贴数字。
  • 使用 r; 替换空格为分号。
  • 使用 j 移动到下一行。
  • 使用 2dd 删除当前行和下一行。
  • 输入 q 停止录制宏。

检查宏内容

:reg c

应该显示 0dwjdWkPr;j2dd

执行宏

  • 使用 4@c 重复宏格式化剩余数据。

练习 6:从 HTML 中提取数据

目标:将链接从 HTML 转换为纯文本。

  • 将光标移动到包含 <a> 的行。
  • 录制宏到 "q" 寄存器:
    qq
    
  • 使用 df@ 删除到并包括 "@"。
  • 使用 f< 定位到 <
  • 使用 cf> 替换 </a> 为换行,按 <ENTER>
  • 输入 q 停止录制宏。

检查宏内容

:reg q

应该显示 df@f<cf>^M^[

执行宏

  • 使用 @q 执行宏,重复 @@ 直到所有链接被提取。

退出 Vim

如果您想放弃更改以重新尝试练习,输入:

:q!<ENTER>

总结

通过这些练习,您将熟悉如何在 Vim 中创建和使用宏,可以大大提高您的编辑效率。若有任何疑问或需要进一步的帮助,请随时询问!

posted @ 2025-03-10 10:36  皇帽讲绿帽带法技巧  阅读(45)  评论(0)    收藏  举报