夜黑风高,花满楼和陆小凤矗立在华山之巅。
花满楼:为何40年前你用vi,今天你还用vi
陆小凤:因为vi是万能的,是最高效的编辑工具!
花满楼:错!Emacs才是!
陆小凤:我不和你争,你是对的!
花满楼:我也看你用Eclipse写java程序,你对vi不忠!
陆小凤:我Eclipse安装了vi插件!
花满楼吐血!继续道:我看你用过visula studio写c++,你对vi不忠!
陆小凤:我安装了vi插件!
花满楼继续吐血!有气无力道:我看你用过wingide写python,你对vi不忠!
陆小凤:我启用了vi模式!
花满楼一个踉跄倒地!气若游丝:为何你现在无论写什么只用vim?
陆小凤:我
年少不知vi好,
沾花惹草尝百草,
现在发现原配好,
只用vi到地老。
序言
vi是一个工具、是一个信仰。不理解vi的信仰,学起来会觉得不可理喻,理解后,就不会再用任何其他编辑工具了,知道创宇公司创立以来,很长一段时间都只允许使用vim。
上周,Vim 文本编辑器作者 Bram Moolenaar 因病离世,享年 62 岁,让人惋惜,又一位优秀的、世界级的程序员离开了我们。自 1988 年基于 Vi 开发 Vim 以来,Bram Moolenaar 把自己人生中的大部分时间都奉献给了这个他深爱的开放源代码的工具,在一次采访中,他这样说道:“我一个人生活,这样我就不必供养一个家庭。你知道,养一个家庭会很难,因为我做的大部分工作没有报酬。”2008 年,因为在自由软件及 Vim 的贡献,他获得了 NLUUG 奖。谨以此文献给Bram Moolenaar。
一、磨刀不费砍柴工
开始教程之前,先到这个网站来
https://sourceforge.net/projects/vimcdoc/
下载中文帮助文档。windows的下载win版本,linux的下载
vimcdoc-2.4.0.tar.gz
下载回来解压,命令行进入解压目录执行:
sh vimcdoc.sh -i
就会安装中文帮助文件
然后打开vim
想成为骨灰级的vim玩家,知道帮助系统的使用,是最基本的。
输入:help 就会来到帮助页面
在帮助页面,用Ctrl+F向下翻页,Ctrl+B向上翻页,用j向下移动光标,k向上移动光标,h向左,l向右。使用方向键,鼠标滚轮也是ok的。
把光标移动tutor上面,这里是向初学者的30分钟教程,照着教程学一遍就基本会了。
光标在tutor上时候,按Ctrl+] 相当于进入这个标题对应的链接,来到这个页面
这一页有用的知识只有3个:
1)看到可以点的链接,光标移动到上面,Ctrl+]进入
2) Ctrl+o (不是零)回退
3)命令行运行vimtutor可以看到本教程
看完这个教程后,:q退出
如果不想花30分钟的话,看下面入门教程也可以。如果你已经会vi,直接跳到第三章。
二、vim入门
vim的哲学:手不离开键盘,完成一切,以此成为最高效的编辑工具。
了解这一点,才能理解变态的逻辑。
以编辑文件network.c为例,
bash$ vim network.c
默认进入命令模式
在命令模式
0)打开文件,保存文件,退出
bash% vim filename,就是打开文件
已经打开文件编辑后 :w 保存
:q退出
:e filename 编辑filename文件
:e 目录名,然后用j和k上下移动选择文件,回车后编辑
可以打开多个文件 vim *.c
或 vim file1 file2 file3
用:prev切换到上个文件 :next 切换到下个文件
1) 移动光标
移动光标:上下为j和k,左右为h和l ,属于你右手最常见的位置
w跳到单词后面,b跳到单词前面
命令前面都可以加上数字
3w,跳到3个单词后面
4j跳过后面4行
到行首按0,到行尾按$
上下翻页Ctrl+F Ctrl+B
翻到第一行 gg ,翻到最后一行G
翻到第100行 直接敲 100G,以此类推
标记和返回标记:光标移动到某关键行,可以用ma给这行做一个标签,标记为a(也可以在别处mb mc md ..... 标记为 b、c、d...,m是标记命令,后面的a,b,c是这行位置取一个名字),过一会儿,翻到其他地方的时候,用'a 'b 'c就能跳转回到刚才标记的地方。
通过查找移动光标:fo ,查找o并移动到o字符处,2fo 查找本行的o字符并跳到第二个o处
一些智能跳转:
在(上按%会自动到),在{上按%会自动到}
]} 跳到本段落块末尾 ,对应当然也有 [{
还有[[ 和]]也可以自己试试
2) 删除
dd删除本行
dw删除本单词后面部分
daw删除本单词
2dd删除两行
dG从光标所在处删除到句末
3) 进入编辑模式
i进入插入模式,从此相当于进入了打字模式,你敲打的字符都会出现在文本中。
按Esc退出编辑模式,退出后,回到命令模式。
i是从光标当前位置插入,o是本行下面插入,O是行上面插入,A是本行结尾插入,I是本行前方插入。
4) 选择、拷贝、粘贴、剪切、undo、redo、合并行
Shif+V,然后用j和k控制上下选择数
选择好了后,就可以d删除,或y拷贝
任何删除的内容,或拷贝的内容,可以光标移动到需要粘贴的地方用p粘贴到光标后面,或P粘贴到前面
undo: 用u
redo:用Ctrl+r
合并行用:J
5) 查找文本
用/跟要找的文本,然后回车
比如查找 /linux,回车后,如果找到,光标会移动到第一个单词上
之后按n就会条到下一个点,按N会跳到上一个点
6) 重复工作自动化
q指令是录制指令作为宏,q之后接一个字母,用这个字母给这次录制的指令过程宏取名字,
录制结束后,按q结束录制
一会儿如果要重复刚才的动作,就用@指令,@后面跟一个字幕,就是上面的宏,重新执行一遍刚才的指令。
比如,我要把所有c文件中,第2行的stdio.h修改为safe_stdio.h
bash$ vim *.c
默认会显示第一个文件
然后 qa 开始录制宏
2G
:s/stdio.h/safe_stdio.h/g
:w
:q
q
跳到第二行、替换文本、修改后存盘、退出该文件、宏录制结束
此时就到了第二个文件编辑状态,第一个已经完成并存盘了
然后我100@a 就是上面的步骤做100次,于是100个.c文件就修改完成了
7) 多标签、多窗口
vim支持多标签
:tabnew filename
:tabnew dirname
就可以创建多个标签页
然后用:tabprev :tabnext在多个标签中切换
每个标签下面可以有多个窗口
用
:sp filename/dirname 创建横向的窗口
:vsp filename/dirname 创建纵向的窗口
用Ctrl+w 然后jklh选择激活上下左右的哪个窗口
如果鼠标设置为 :set mouse=a
可以用鼠标选择标签和窗口
8) 使用指令模式
我把:打头的叫指令模式,会在最底下出现:等待输入指令
常用指令有
替换:
本行全部redo换成undo :s/redo/undo/g
全文的redo换成undo::%s/redo/undo/g
当前行到第100行的redo换成undo :.,100s/redo/undo/g
这里面,s是指令,前面的是范围,范围包括%全文,或1,100指1到100行内,.,100指当前行到100行,最后那个g是指全部替换,不写就是只替换一次
更换背景色彩用:color blue
常用颜色有blue,darkblue等
显示行号:set number ,不显示行号 :set nonumber
使用鼠标选择模式 :set mouse=a ,不使用:set mouse=
指令可以放到HOME目录下的.vimrc文件中,这样vim启动时候会自动执行,比如改背景颜色之类的,就会每次自动生效
有个技巧就是,通常把vim目录下的vimrc_example.vim文件拷贝到HOME目录下,作为.vimrc,然后再在末尾追加自己的指令
cp /usr/share/vim/vim81/vimrc_example.vim $HOME/.vimrc
我的是vim81,自己的版本,可以到/usr/share/vim/目录查看,windows用户到vim安装目录下找到然后拷贝到用户目录改名即可
三、奇技淫巧
vim还能干什么呢?
vim有自己的script语言,按理就是能干一切!而且还支持python、perl、lua扩展语言,扩展空间无数大!
1) 写缓冲区溢出利用程序
我用vim的script编程语言写过一个程序,用来利用有缓冲区的漏洞,提升用户权限到root:
《溢出利用程序和编程语言大杂烩》
https://blog.csdn.net/iiprogram/article/details/571269
2)找漏洞
有漏洞的开源程序,修复漏洞后都不会说漏洞在哪里,怎么利用,就需要去分析程序改了什么地方,然后分析为什么这么改,然后再逆向推理如何利用。前提要先找到改了哪里。
vimdiff这个工具就很好用了
bash$ vimdiff network.c ../old/network.c
看,一目了然!
如果遇到二进制程序,也不怕,用ida逆向工程后,保存汇编语言的程序,然后对两个汇编程序做vimdiff效果差不多
vimdiff甚至允许你指定一个脚本,比较的每行,经过这个脚本处理后再比较,看是否相同。这个特别重要。比如两个机器汇编指令其实是一回事儿,就可以认为相同,但不同版本编译器,可能会使用不同指令形式,这就需要自己写比较程序然后提供给vimdiff用。
四、vim入土
开个vim
:help
我们来总览一下vim帮助文件的目录,就能知道我们要成骨灰的话,需要学哪些知识了。
如果vim已经会了,可以放到quickref上 总览常用命令,看看上面的命令是否自己已经掌握了,算算比例,就知道自己大概vim考试能考多少分了。
有空时候,把上面的文档都看一遍,都掌握了,就是骨灰了。当然上面截图只截取了20%,还需要一直顺着翻页。
尤其程序员,必看: 语法高亮、编程程序、代码间移动、折叠
如果想浏览器上阅读这些资料,可以访问:
https://vimcdoc.sourceforge.net/doc/help.html
---END
谨以此哀悼Bram Moolenaar
永远的Vim
原文始发于微信公众号(神龙叫):Vim从入门到入土
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论