VIM学习笔记

1. ex模式

vim中,按:触发的命令行模式,称为 ex模式,具体命令参见如下笔记:

https://blog.csdn.net/u010250151/article/details/51868751?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522814b671a9898c954642607c9f589f1e9%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=814b671a9898c954642607c9f589f1e9&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-51868751-null-null.142^v102^pc_search_result_base4&utm_term=vim%20%20Ex%20%E5%91%BD%E4%BB%A4&spm=1018.2226.3001.4187文章浏览阅读816次。本文出自 http://blog.csdn.net/shuangde800本文是在学习《使用vi编辑器, Lamb & Robbins编著》时在evernote写的其中一章笔记,现在整理好,一方面温故而知新,一方面希望对大家能有些帮助。ex的命令在vim编程中都是非常常用的,熟练这些命令对于提高编程效率有很大的帮助。主要内容:_vim ex命令https://blog.csdn.net/u010250151/article/details/51868751?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522814b671a9898c954642607c9f589f1e9%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=814b671a9898c954642607c9f589f1e9&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-51868751-null-null.142^v102^pc_search_result_base4&utm_term=vim%20%20Ex%20%E5%91%BD%E4%BB%A4&spm=1018.2226.3001.4187

2. ex命令格式

行号 命令

组成。如:

2 p 表示打印出第二行(显示到命令行上方)

2,20 d 表示删除第二行到第20行

3. 默认行号

ex命令中,没有给到行号,则默认是当前行

如:

d

表示删除当前行

4. ex常见命令

d 删除 :10 d 表示删除第10行

m 移动 :10, 20 m 25 表示把10到20行移动到25行之后

t 复制 :10, 20 t $ 表示把10到20行移动到文末

5. ex行号

没有给出行号,则是默认行号

$ 表示文末

% 表示全文

6. vim搜索

:\word

输入:\字符串,搜索相应的字符,检索出结果后,通过按键n向下,N向上来查找下一个或者上一个,注意:\是向后搜索,如果只有当前行前面有匹配,会提示没有找到,需要按n来继续找到下一个

7. vim替换

复制代码
:[范围]s/目标模式/替换内容/[标志]

在ex命令下,使用s命令,标志有:

常用标志​​:

  • g:替换行内所有匹配项(不加则仅替换第一个)。
  • c:每次替换前确认(Confirm)。
  • i:忽略大小写(:set ignorecase 可全局设置)。
  • I:区分大小写(覆盖全局设置)。
范围​ 示例 说明
​当前行​ :s/old/new/g 替换当前行所有 oldnew
​全文​ :%s/old/new/g 替换整个文件
​行号区间​ :10,20s/old/new/g 替换第 10 到 20 行
​可视模式​ 选中文本后 :'<,'>s/old/new/g 替换选中区域
​相对行号​ :.,+5s/old/new/g 从当前行到后 5 行

8. vim的寄存器

所谓的寄存器是指vim编辑时,复制的内容,或者曾经执行过的命令。

vim 有10个数字寄存器,存放着最近10次拷贝的内容,使用的格式为:

bash 复制代码
"1

如:粘贴第3个寄存器中的内容到当前行,则使用如下命令:

bash 复制代码
"3p

可以通过reg命令查看各个寄存器中的内容。

具体的寄存器名称及作用如下:

寄存器名 用途
""(无名) 默认寄存器,直接使用 y(复制)、d(剪切)、p(粘贴)时会用到。
"0-9" 数字寄存器,0 存储最近一次复制的内容,1-9 存储历史删除/剪切内容。
"a-"z" 命名寄存器,可手动指定存储内容(如 "ayy 复制当前行到寄存器 a)。
"+"*" 系统剪贴板寄存器(Linux 中 "+ 对应 Ctrl+C/Ctrl+V"* 对应鼠标中键)。
": 存储最近执行的命令(如 :echo "hello" 后,":p 会粘贴这个命令)。

注意:+的特殊性,这个+寄存器其实是,系统复制的内容地址,要想打通系统和vim将的复制,必须使用这个+寄存器,具体命令如下:

复制内容到系统(等一下可以使用ctrl+v粘贴到不是vim的地方)

bash 复制代码
"+y

注意:不要少了引号

粘贴系统内容到vim

bash 复制代码
"+p

同样注意,不要少了双引号

9. vim-gtk

如果命令,"+p无法起作用,那么,应该是装的vim的版本不对,需要按照vim-gtk版本,而不是vim

附录:常见的 Ex 命令分类及示例


​一、基础操作命令​

命令 功能 示例
:q 退出 Vim :q
:q! 强制退出(不保存修改) :q!
:w 保存文件 :w
:wq 保存并退出 :wq
:e <文件路径> 打开新文件 :e ~/new.txt
:e! 重新加载当前文件(放弃修改) :e!

​二、文本编辑命令​

命令 功能 示例
:s/old/new/ 替换当前行第一个 oldnew :s/foo/bar/
:s/old/new/g 替换当前行所有 oldnew :s/foo/bar/g
:%s/old/new/g 全文替换 oldnew :%s/foo/bar/g
:m <行号> 移动当前行到指定行 :m 5(将当前行移到第 5 行后)
:t <行号> 复制当前行到指定行 :t 3(复制当前行到第 3 行后)
:d 删除当前行 :d
:d <范围> 删除指定范围的行 :3,5d(删除 3-5 行)

​三、范围操作与全局命令​

命令 功能 示例
:1,10s/old/new/g 替换 1-10 行的 oldnew :1,10s/foo/bar/g
:g/pattern/命令 对匹配 pattern 的行执行命令 :g/error/d(删除所有含 error 的行)
:v/pattern/命令 对不匹配 pattern 的行执行命令 :v/error/d(删除所有不含 error 的行)
:norm 命令 在指定范围执行普通模式命令 :%norm A;(所有行末尾添加 ;

​四、缓冲区与窗口管理​

命令 功能 示例
:ls 列出所有缓冲区 :ls
:b <编号/名称> 切换到指定缓冲区 :b2(切换到缓冲区 2)
:bd 删除当前缓冲区 :bd
:sp <文件名> 水平分割窗口并打开文件 :sp new.txt
:vsp <文件名> 垂直分割窗口并打开文件 :vsp new.txt

​五、设置与配置​

命令 功能 示例
:set <选项> 临时设置选项 :set number(显示行号)
:set <选项>=值 设置选项值 :set tabstop=4(Tab 显示为 4 空格)
:syntax on/off 启用/禁用语法高亮 :syntax on
:colorscheme <主题> 切换颜色主题 :colorscheme desert

​六、执行外部命令​

命令 功能 示例
:! <系统命令> 执行 Shell 命令 :! ls -l
:r !<系统命令> 将命令输出插入当前光标位置 :r !date(插入当前日期)
:w !sudo tee % 以 sudo 权限保存文件 (用于无写权限时的强制保存)

​七、参数列表与文件批量操作​

命令 功能 示例
:args <文件列表> 设置参数列表(多文件操作) :args *.txt
:argdo <命令> 对所有参数列表中的文件执行命令 `:argdo %s/foo/bar/g

​八、宏与脚本​

命令 功能 示例
:@<寄存器> 执行寄存器中的宏 :@a(执行寄存器 a 的宏)
:source <文件> 加载并执行 Vim 脚本 :source ~/.vimrc

​九、帮助与调试​

命令 功能 示例
:help <主题> 查看帮助文档 :help :s(查看替换命令帮助)
:messages 查看 Vim 的消息历史 :messages

​总结​

  • ​Ex 模式的核心逻辑​:通过范围(行号、模式匹配)和命令组合,实现精准的文本操作。
  • ​高效操作技巧​
    • 结合正则表达式(如 :%s/\v(\d+)/\1/g 使用"非常魔法模式")。
    • 使用 :g:v 全局过滤行。
    • 利用 :argdo:bufdo 批量处理文件/缓冲区。
相关推荐
The_cute_cat6 分钟前
25.4.15学习总结
学习
宋隽颢28 分钟前
GIT工具学习【4】:推送到远程仓库
git·学习
ᖰ・◡・ᖳ1 小时前
Web APIs阶段
开发语言·前端·javascript·学习
youka1501 小时前
大数据学习栈记——MongoDB编程
大数据·学习·mongodb
☞无能盖世♛逞何英雄☜2 小时前
Web三漏洞学习(其二:sql注入)
数据库·sql·学习
结冰架构2 小时前
【AI提示词】金融信息抽取工程师工作流程
人工智能·学习·ai·金融·提示词
AI服务老曹3 小时前
优化运营、降低成本、提高服务质量的智慧物流开源了
运维·人工智能·学习·开源·能源
美味的大香蕉3 小时前
Spark-SQL
笔记
踢足球的程序员·3 小时前
OpenGL学习笔记(立方体贴图、高级数据、高级GLSL)
笔记·学习·图形渲染
WarPigs3 小时前
VRoid-Blender-Unity个人工作流笔记
笔记·blender