曾经听过如下关于vim的笑话:
随机生成字符串最好的方式就是让新手退出vim编辑器。
可见刚接触vim的人对于vim的使用可谓是浑身难受啊,不过由于在Linux的世界里,vim常常是作为内置的文本编辑器存在的。
因此在非桌面环境中编辑文件就需要熟悉vim,这样才能得心应手的进行日常工作。
三种编辑模式
vim是vi的改进版,这里不做区分,统一用vim代替vi。
- 一般模式
使用如下命令:
vi demo.txt
这样打开的一个文件模式就属于一般模式,该模式下可以使用上下左右键移动光标、删除、复制粘贴字符或者正行等,但是不__能插入__新的字符。
- 编辑模式
在一般模式下无法编辑文件内容。可以通过在一般模式下按下如下的按键进入编辑模式:
- i,I : i为当前光标处插入,I为当前行的第一个非空格字符插入;(类似Home + i)
- a,A:a为当前光标下一个字符插入,A为当前行的最后一个字符插入;(类似End + i)
- r,R:进入替换模式,r只会替换光标所在的字符一次,而R会一直替换直到按下Esc键;
这么多进入编辑模式的按键,常用的就是__i和a,A__。
- 命令行模式
一般模式进入命令行模式,输入: ? / 三个字符中的任意一个即可进入。
该模式下的功能十分丰富,提供数据的查找、替换,文件保存,显示行号等文本编辑器的高级功能。
如下图所示:按下:,输入命令wq即可保存当前的更改并退出编辑器。
常见的快捷键
一般模式下的常用按键:
- 光标移动
- 0或Home : 光标移动至当前行首;
- $或End:光标移动至当前行尾;
- G:移动的文件的最后一行;(常用)
- nG:n为数字,移动到文件的第n行;例如20G移动到这个文件的第20行;
- gg:移动到文件的第一行。相当于1G(常用)
- n space:移动到这一行的第n个字符(第n列)
- J:将光标所在行与下一行的数据和为一行,类似删除本行的
- u:撤销上一次操作;(undo)
- ctr+r:重做上一次操作,反撤销;(redo)
- .:重复上一次操作,重复删除,重复粘贴等;
- 删除、复制和粘贴
- x,X:x为向后删除一字符类似del,X为前删类似backspace;
- nx:后删n个字符
- dd:删除当前行
- ndd:删除当前行及以后的合计n行
- d1G:删除光标所在的行到第一行的所有字符
- dG:删除光标所在行到最后一行的所有字符
- d$:删除光标到当前行的行尾之间的字符
- d0
- yy:y是复制,同删除;
- nyy
- y1G
- yG
- y0
- y$
- p,P:p是将复制的内容再光标下一行开始粘贴,P是在光标的上一行开始粘贴。
- 查找
- /pattern:进入命令模式,输入查找的正则pattern,向下查找下一个符合pattern的字符串。
- ?patterb:向上寻找符合pattern的字符串;
- n:按照相同的方向重复前一个查找的操作,next;
- N:按照相反的方向重复前一个查找操作
- 替换
- :n1,n2s/w1/w2/g 在n1和n2行之间,寻找w1,用w2去替换。
- :n1,n2s/w1/w2/gc 在n1和n2行之间,寻找w1,用w2去替换,替换之前需要询问用户;
- :0,$s/p/P/gc
- 命令行模式的文件保存、离开
- :w : 将编辑的数据写入到磁盘文件中
- :w! : 若文件的属性为只读的,强制写入该文件
- :q : 如果对文件没做更改,则该命令直接退出编辑器,否则,退出失败,会提示对文件已经做修改。
- :q! : 强制退出,则不会保存该次编辑的数据。
- :wq : 保存并退出
- :wq! : 强制保存后退出
- ZZ:若文件没有更改,则不保存离开,否则,则保存后离开。
- :w [filename]:将编辑的数据保存为另一个文件,相当于另存为。
- :r [filename]:在编辑的数据中,读如另一个文件的数据,即将filename对应的文件内容追加到光标所在行后面。
- :n1,n2 w [filename]:将n1到n2行的内容保存为filename这个文件
- :! cmd:暂时离开vi,执行cmd。例如::! ls/home 即可在vi中查看/home下面的ls输出信息。