vim (vi的升级版),是Unix系统自带的文本编辑器,功能丰富。
熟练使用vim能有效提高处理文本的效率。有一个内置的vim教程,详细又好上手,用
vimtutor
就可进入,花1小时就能学会。今天来总结下vim文本编辑的各项基本功能,方便大家复习查用。
进入/退出 vim编辑模式
- 进入
vim 文件名
- 退出
先按ESC
回到普通模式:q!
不保存修改,退出:wq
保存修改,退出
光标移动跳转:
逐字移动:字母h j k l 键
h (左) j (下) k (上) l (右)
可能大家习惯用箭头光标,但字母键习惯了会很快。跳转模式:w / e / 0 / $
w
word,逐词向后跳e
end, 跳至词末 (也适用于长断句)0
跳至行首$
跳至行末与数字组合使用
3w
向后跳转3个单词,停在词首5e
向后跳转5个单词,停在词末
指令
+数字
+w/e/0/$ 模式
详见下文例
子。
文档内大幅跳转
gg
跳回文档开始G
跳至文档末Ctrl + G
能告诉你目前在文档中的位置,比如line 391 of 620
行号
+G
跳至想要去的行,如391G
即跳至391行
插入内容:
i
(即insert) 在光标停留处插入内容A
(即append)在光标所在行的行末追加内容o
向下插入空白行O
向上插入空白行
写完后按ESC
回到普通模式,以进行下一个操作
删除(剪切)/复制/粘贴
x
删除光标所在处字符d
即deletion,即删除,也是剪切
与w / e / 0 / $
合用dw
删除当前单词de
从点前为止删至词末d0
从点前为止删至行首d$
从点前为止删至行末dd
删整行也可与数字组合使用
例如d3w
,向后连删3个词(包括当前词)d5$
,向后删至第5个行末4dd
,连删4行p
相当于paste,粘贴末次被删除的内容
与d
合用,可实现剪切
与粘贴
功能y
复制
复制选定内容: 普通模式下按v
进入 Visual Mode,再用方向键
或hjkl
选择目标文本,再按y
进行复制,目标位置p
粘贴,其他内容向下顺延。
复制当前行:yy
,目标位置p
类似的,与数字组合,4yy
可以复制往下数的4行。
撤销与重做
u
撤销前次修改Ctrl + R
重做前次修改U
撤销本行的所有修改(这步当然也可以被u
逆转)
修改内容
当然你可以将错误内容删除
,再插入
新内容,但这样就需要两步。
c
即 corret,改写,可以省去手工删除步骤。
光标移动至要修改的起始位置:ce
从当前位置删至词末,并输入新内容c$
从当前位置向后删至行末,并输入新内容c0
从当前位置向前删至行首,并输入新内容r
即 replace,替换光标处字符
查找
查找目标内容
普通模式下,/
+目标内容
就从当前位置,在后文中开始搜索?
+目标内容
在前文中搜索
匹配结果不止一个时,按n
向后文找下一个,N
向前文找定位成对符号
在编程的脚本中,语句中经常有成对的各种括号( )
[ ]
{ }
光标停留在其中一个上,按%
就能定位到成对的另一个
这在排查脚本错误时很有用
替换
普通模式下:
修改全文的第一个匹配处::s/原内容/新内容
修改某一行中所有匹配(可以有多个)::s/原内容/新内容/g
修改某范围的所有项,可指定行号#
,::#,# s/原内容/新内容
修改全文中所有符合条件的::%s原内容/新内容/g
g
表示global,全局
末尾加c
, 即check, 会提前向你确认:
:%s原内容/新内容/gc
会问你:replace 旧内容 with 新内容 (y/n/a/q/l/^E/^Y)?
(y/n/a/q/l/^E/^Y)?
需要选答
对多个匹配结果,默认会逐个和你确认y
表示该处要替换、继续下一处n
表示该处不要替换、继续下一处a
表示all,全部替换q
退出当前指令l
表示last,当前这个改完就退出^E
和^Y
分别是按住Ctrl键+E或者Y,上下滚动页面
最后
vim tutor里还有些其他功能介绍,如怎样在编辑模式下如何使用外部的指令行等。
但最正如教程中所说,最重要的是:Do not try to memorize, learn by usage.