Vim高级进阶之ex命令集 |
您所在的位置:网站首页 › vi命令全称 › Vim高级进阶之ex命令集 |
ex是Vim对行编辑器ed的支持.ed是一个面向行的编辑器.在远古时代,还是黑白终端的时代,有一个流行的面向行的编辑器ed,也即把文件一行一行的读入,一次只显示一行,然后编辑这行.所以Vim中的ex命令都是ed编辑器所支持的命令,现代所用的流编辑器sed中的命令是ed命令的扩展.所以掌握了Vim中的ex编辑命令,稍加变通就连sed也一起搞定了.
Vim是全屏编辑器,因此不会像ed那样只显示一行,对于Vim,ed命令编辑的一般都是当前行,这就相当于ed中所显示的那行,实际上也是文件的当前行.
就是打开后进行一些操作 $vim +n file -- 打开file文件后跳到第n行 $vim + file -- 打开file文件后跳到最后一行 $vim +/pattern file -- 打开file文件后跳到含有pattern的那行 如,$vim +/"your life" file -- 打开后跳到"your life"的那行 编辑多个文件 命令,模式和buffer会在多个文件和多个窗口之前共享.所以如果同时编辑多个文件会提升一些效率 1. 命令行启动多个文件 $vim a.txt b.txt c.txt 2. 已经在编辑一个文件时,可以用:e命令开始编辑另外一个文件 :e another-file 3. args -- 显示所有的文件列表,当前的文件会以[filename]形式标出 $vim a.txt b.txt c.txt :args ----->>>> [a.txt] b.txt c.txt :n ----->>>> a.txt [b.txt] c.txt 4. 在文件之间进行切换 :p[rev] -- 前一个文件:n[ext] -- 下一个文件:last -- 最后一个文件 双文件模式 1. 启动方式:当编辑一个文件的时候,用e命令读入并编辑另外一个文件就进入了双文件模式 2. 二个文件速记符,相当于字符串宏,内容就是所编辑的二个文件名 % -- 当前文件名# -- 前一个文件 3. 示例 $vim a.txt :w -- 保存修改 :e b.txt -- 开始编辑另外一个文件b.txt :e # -- 开始编辑前一个文件,也就是文件a.txt :e # -- 开始编辑前一个文件,这时是b.txt :w %.bak -- 另存当前文件为b.txt.bak(此时当前文件%为b.txt) :r # -- 拷贝a.txt的内容到b.txt当前行下 :split # -- 在新窗口中打开a.txt :e! # -- 舍弃当前文件修改,并开始编辑a.txt 组合命令 可以用|来把几个命令组合在一起使用,与用;来组合Shell命令是一样的.如 :1, 3 d | s/their/they -- 删除1到3行然后在当前行把their替换为they 获得帮助 对于任意一个命令都可以用 :help cmd -- 来获取帮助文档 执行Shell命令 :!cmd -- 执行Shell命令,会跳到Terminal以显示命令的结果 对于大部分Shell命令可以通过内部来执行 :cmd -- 执行命令,其操作结果显示在状态行里. 如 :cd -- 切换当前目录; :ls遍历目录内容; :pwd -- 查看当前工作目录 临时性的进入Shell 有时候想到到Shell终端进行某些操作,然后还要回来编辑文件.可以这么做: :x -- 保存并退出到终端;做想做的事情 $do all stuff you want $vim file -- 再次打开并编辑文件 这是一个很常用的场景,所以就有了更快捷与方便的方法,可以shell或sh命令来做相同的事情 :sh -- 回到终端 $ do you stuff $exit -- 当完事后用exit命令就会退出终端然后回到编辑器. sh命令很实用.比如常见的编辑编译运行调试例行,编译后就可以用:sh命令退出到Shell进行测试和调试,然后再exit到编辑中. Quickfix让编辑编译都不用离开Vim 如何编译 最简单的方法当然是直接运行gcc命令: :!gcc -o list list.c -std=c99 -Wall -lm 这绝对可行,但这很麻烦 Vim中可以使用make命令 :make list -- 编译list.c 但是这只会使用make的默认隐匿规则,相当弱,比如没有额外的选项,想指定如Wall或std都是不行的. 当然你可以写一个makefile,然后就可以开心的直接运行:make就可以了.但如果没有makefile怎么办呢,特别是某些单个文件之类的.每个文件的编译目标和源码都不一样,这时就可以写一个简单的makefile,不指定具体的编译目标和源码文件,而只是定义一些简单的编译选项和规则: #makefile LDLIBS= -lm CFLAGS= -g -std=c99 -Wall -Werror 这样,在Vim中: :make list -- 用makefile中定义的规则来编译list.c:make hello -- 用makefile中定义的规则来编译hello.c 还可以用makeprg命令来指定编译的目标和规则,但是这个命令不好用,而且每换一个新文件就要跟着一起改,不如makefile来的方便. 用Quickfix快速修改编译错误 运行了make命令编译之后,如果有编译错误Vim会以列表形式把编译错误列出,并eQuickfix工具快速帮你定位出错的行 :cc -- 显示编译错误的详细信息,这些信息显示在状态行里:cn -- 下一个编译错误:cp -- 前一个编译错误:cw -- 打开Quickfix窗口.这会在屏幕下面打开一个新窗口,里面的内容就是一个编译错误列表:cl -- 列出所有的编译错误 Quickfix实际上就是一个编译错误列表,每个Quickfix列表能显示10个错误,所以想看其他的错误(如果多于10的话) :col -- 前一个列表:cnew -- 后一个列表 示例:一个单文件的编辑编译运行和调试: $vim hello.c edit edit :make hello -- 编译hello :cc -- 显示编译错误信息 :cn -- 下一个 :cn -- 下一个 :make hello -- 编译 ... Okay :sh -- 进入Shell $./hello -- 运行并测试程序, 有Bug $gdb hello -- 调试 ... 找到了问题 $exit 修复运行时问题 :make hello :sh $./hello $exit -- 回到编辑器 在Vim中使用强大的搜索神器grep 搜索匹配神器grep也可以在Vim中使用,使用方式 :gr/grep [opt] pattern files -- 在files中搜索匹配pattern,与Shell命令中的grep的使用方式是一样的. 结果是以Quickfix列表形式给出的,因此Quickfix的命令这里也适用: :cn -- 下一处匹配:cp -- 前一处匹配 :cw -- 打开Quickfix列表,里面是超链接,点击后可以直接进入那个匹配:cl -- 相看所有的匹配 这些命令会从一个匹配跳到下一个或上一个匹配.如果超出了这个文件则会进入另外的文件.所以能在不同文件之间跳来跳去.很是强大. 更多的内容请查询帮助 :help grep 全局搜索和替换 这也是用ex命令,因为比较多可以单独写一篇,请看这篇文章 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |