vim
vim 是linux系统自带的文本编辑器。Vim是一个类似于Vi的、功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体
- vim模式
vim 一打开,就会进入所谓的普通模式(Normal),在这个模式下,大家输入的所有内容都会被 vim 解析成相应的指令并执行。
如果要输入内容,必须键入字母 i ,将 vim 切换到所谓的插入模式(Insert)。在插入模式下,大家就可以像在其他普通编辑器下那样输入文字了。输入完毕,需要通过按Esc返回普通模式。
vim 还有一个可视模式(Visual),『可视』是直译,翻译成『选中』比较合适。可视模式跟普通编辑器的选中有点像,都会选中一片文字,然后可以对选中的文字做一些操作。vim 的可视模式分三种,分别是:
- 普通选中(使用 小写 v 开始普通选中)
- 按行选中(使用 大写 V 开始行选中)
- 按列选中(使用 ctrl+v 开始列选中)
选中之后可以执行其他操作,返回普通模式直接按Esc。
普通模式到底有什么用呢?
- 在普通模式下,大家可以快速地查找、定位、修改和删除代码
- 在插入模式下,相应的操作(查找、定位、修改和删除代码)会低效不少,主要用来写代码(要注意和修改代码的区别)。
作为程序员都有体会,大家大部分时间是在查代码、看代码、改代码,写代码的比重并不大。为了提升整体的工作效率,vim 将普通模式作为默认模式。代价则是大家需要在输入文本的时候需要额外切换一次模式。
- vim光标
- vim 使用 H(左)、J(下)、K(上)、L(右) 四个键来控制光标向左下上右四个方向移动,一次移动一行或者一列。
- vim 还针对行内移动提供了一些快捷键,加快移动速度。如 ^ 表示行首、$ 表示移到到行尾。
- vim 还支持按单词移动,如 w 表示跳到下一个单词的开头,e 表示跳到下一个单词的结尾。
- vim 行内移动的大杀器则是行内查找。大家可以通过键入 fa 跳转到当前行的下一个 a 上。这个 f 表示向前(行尾)查找;如果要向后查找,则需使用 F。注意,行内查找仅支持单个字母。
- 向上翻页用 ctrl+b,向下用 ctrl+f。跳到文件的第一行用 gg,最后一行用 G。
vim 还有很多移动快捷键,相对不那么常用,这里不多介绍,初学者不用纠结。
如果只看 hjkl,大家不觉得 vim 在光标移动上有什么优势,甚至会认为还不如使用上下左右键方便。但再看行内查找,大家应该就会体会到普通模式(Normal)的威力。普通模式并不普通!
- 查找
在命令模式下输入以下命令进行查找,光标会跳转到第一个匹配的字符,此时按下n 代表重复前一个搜索动作;按下N代表反向重复前一个搜索动作 。
3.1 Vim查找支持正则表达式
- 例如/vim$匹配行尾的"vim"。需要查找特殊字符需要转义,例如/vim$匹配"vim$"。注意:查找回车应当用,而替换为回车应当用(相当于)。
3.2 vim查找默认是大小写敏感查找
- 在查找模式中加入c表示大小写不敏感查找,C表示大小写敏感查找。例如:/fooc 会查找所有foo、FOO、fOOD等
3.3 查找光标所在单词
在命令模式(普通模式)下按下:
- *:匹配当前光标所在的单词(这里的单词是指前后为空白字符或者点号,例如当前为foo, 可以匹配foo bar中的foo,但不可匹配foobar中的foo。这在查找函数名、变量名时非常有用),并将光标移动到下一个单词
- #:匹配当前光标所在的单词,并将光标移动到上一个单词
- g*:查找光标所在单词的字符序列,每次出现前后字符无要求,例如当前为foo,那么foo bar和foobar中的foo均可被匹配到。
- 替换
命令模式(普通模式)下替换的语法如下::{作用范围}s/{目标}/{替换}/{替换标志}
- % :代表在全文范围内查找并替换
- g:所有的出现都会被替换
- i:i表示大小写不敏感
- I:I表示大小写敏感
- 删除修改
初学者一般会先切换到插入模式,在用退格键删除已有内容,再输新内容。这不但效率低下,不会挫伤初学者的积极性。在命令模式(普通模式)下,正解如下。
- 删除当前行用 dd
- 删除光标所在的字母用 x
- 修改用 r + 新字母
- 也可以选中之后按 x 或者 d 删除整片文字
- 大家选中之后还可以按 c,vim 会删除选中内容,并切换到插入模式,大家可以继续输入新内容。
- vim 还有一个所谓的替换模式(Replace),通过 R 开启,开启后光标所在的内容会被新输入的内容替换。结束用 Esc。
- 复制粘贴
- 复制当前行用 yy
- 也可以选中内容后按 y 复制。
- 粘贴使用 p
- 如果之前是整行复制,按 p 会将复制的内容粘贴到当前行的下一行,粘贴到上一行用 P。
- 如果之前是选中复制,按 p 会将复制内容粘贴到光标当前位置的后面,粘贴到前面用 P。
- 撤销保存
- 撤销上次操作用 u,反撤销用 ctrl+r。
- 保存退出都要在命令模式(普通模式)下完成。保存用 :w path/to.txt,退出用 :q。如果是编辑已经存在的文件可以直接用 :wq 退出。
参考:https://baijiahao.baidu.com/s?id=1651375178973468485&wfr=spider&for=pc