当前位置: 首页 > news >正文

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 批量处理文件/缓冲区。

相关文章:

  • 针对 Java从入门到精通 的完整学习路线图、各阶段技术点、CTO进阶路径以及经典书籍推荐。内容分阶段展开,兼顾技术深度与职业发展
  • Unity有限制状态机FSM
  • 【Java编程】【计算机视觉】一种简单的图片加/解密算法
  • 麒麟高级服务器操作系统内核升级
  • Oracle WITH 子句(也称为 公共表表达式,Common Table Expression,CTE)
  • 终止进程kill和killall
  • 智能合约开发中13种最常见的漏洞
  • 队列的各种操作实现(数据结构C语言多文件编写)
  • 从零构建大模型之Transformer公式解读
  • 大联盟(特别版)双端互动平台完整套件分享:含多模块源码+本地部署环境
  • QT Sqlite数据库-教程002 查询数据-上
  • Java集合框架深度解析:核心接口、实现类与应用场景
  • Android基础入门、Android常见界面布局基础练习
  • 回溯-day65
  • Neovim安装及lazy配置
  • ADI的BF561双核DSP怎么做开发,我来说一说(十六)触摸屏的设计
  • QT Sqlite数据库-教程002 查询数据-下
  • 操作系统导论——第19章 分页:快速地址转换(TLB)
  • Vue.js 项目中 vue.config.js 常用配置项解析
  • bash的特性-命令和文件自动补全
  • 巴勒斯坦民族权力机构主席:哈马斯必须移交武器
  • 阻燃材料点火就着引发一场火灾,河北一企业的产品被指不达标且涉嫌欺诈
  • 全国双拥模范城(县)名单
  • 乌克兰关切有中国人在俄军中服务,外交部:坚决反对无端指责
  • 王毅将出席中国一中亚外长第六次会晤、金砖国家外长会晤和第十五次金砖国家安全事务高级代表会议
  • 言短意长|大学校门到底应不应该开放?