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 | 替换当前行所有 old 为 new |
全文 | :%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次拷贝的内容,使用的格式为:
"1
如:粘贴第3个寄存器中的内容到当前行,则使用如下命令:
"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的地方)
"+y
注意:不要少了引号
粘贴系统内容到vim
"+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/ | 替换当前行第一个 old 为 new | :s/foo/bar/ |
:s/old/new/g | 替换当前行所有 old 为 new | :s/foo/bar/g |
:%s/old/new/g | 全文替换 old 为 new | :%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 行的 old 为 new | :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
批量处理文件/缓冲区。
- 结合正则表达式(如