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 批量处理文件/缓冲区。
相关推荐
red_redemption44 分钟前
自由学习记录(214)
学习
疯狂打码的少年1 小时前
【数据结构】树的基本概念与二叉树定义
java·数据结构·笔记·算法
马上去吃汉堡王1 小时前
Windows11安装Geant4
笔记
气泡水。1 小时前
RHCSA笔记实记
linux·笔记
祈禾2 小时前
Redis三大特殊数据类型
运维·服务器·数据库·redis·笔记·缓存
祈禾2 小时前
计算机组成原理之编译、汇编、链接、解释
开发语言·汇编·笔记·学习
知识分享小能手3 小时前
线性代数学习教程,从入门到精通,矩阵的初等变换与线性方程组(6)
学习·线性代数·矩阵
我命由我123454 小时前
四流一致(合同流、业务流、资金流、发票流)
经验分享·学习·职场和发展·求职招聘·职场发展·产品经理·学习方法
知识分享小能手4 小时前
线性代数学习教程,从入门到精通,矩阵的初等变换与线性方程组(5)
学习·线性代数·矩阵
s1ckrain4 小时前
XR笔记-Extended Reality核心概念总结
笔记·xr·具身智能