1.插入模式
- a → 在光标后插入
- o → 在当前行后插入一个新行
- O → 在当前行前插入一个新行
- cw → 替换从光标所在位置后到一个单词结尾的字符
2.简单的移动光标
- 0 → 数字零,到行头
- ^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
- $ → 到本行行尾
- g_ → 到本行最后一个不是blank字符的位置。
- /pattern → 从当前位置向后搜索pattern的字符串(如果搜索出多个匹配,可按n键到下一个,按N键到上一个)
- ?pattern → 从当前位置向前搜索pattern的字符串(如果搜索出多个匹配,可按N键到下一个,按n键到上一个)
3.拷贝/粘贴
- P → 粘贴
- yy → 拷贝当前行当行于 ddP
4.Undo/Redo
- u → undo
- <C-r> → redo
5.打开/保存/退出/改变文件
- :e <path/to/file> → 打开一个文件
- :saveas <path/to/file> → 另存为 <path/to/file>
- :x, ZZ 或 :wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)
- :bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。
6.按单词移动
- w → 到下一个单词的开头。
- e → 到下一个单词的结尾。
- % : 匹配括号移动,包括 (, {, [. 需要把光标先移到括号上
* 和 #
: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
7.大小写转换
- ~ → 将光标下的字母改变大小写,3~表示将光标位置开始的3个字母改变其大小写
- g~~ → 改变当前行字母的大小写
- U → 将可视模式下选择的字母全改成大写字母
- u → 将可视模式下选择的字母全改成小写
- gUU → 将当前行的字母改成大写,3gUU表示 将从光标开始到下面3行字母改成大写
- guu → 将当前行的字母全改成小写
- gUw → 将光标下的单词改成大写
- guw → 将光标下的单词改成小写
8.在vim中执行linux命令
- :!command → 不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容。
- :r !command → 将shell命令command的结果插入到当前行的下一行。
- :起始行号,结束行号 !command → 将起始行号和结束行号指定的范围内的内容让shell命令command处理,并将处理结果替换起始行号和结束行号指定范围中的内容。
- :起始行号,结束行号 w !command → 将起始行号和结束行号所指定范围的内容作为命令command的输入,不会改变当前编辑的文件的内容。
9.移动
- 0 → 到行头
- ^ → 到本行的第一个非blank字符
- $ → 到行尾
- g_ → 到本行最后一个不是blank字符的位置。
- fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
- t, → 到逗号前的第一个字符。逗号可以变成其它字符。
- 3fa → 在当前行查找第三个出现的a。
- F 和 T → 和 f 和 t 一样,只不过是相反方向。
10.选择
<action>a<object> 或 <action>i<object>
- action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
- object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。
viual模式:可以移动光标进行选择。普通模式下,按v进入
选择后,可以进行如下操作:--
- J → 把所有的行连接起来(变成一行)
- < 或 > → 左右缩进
- = → 自动给缩进
多行编辑:<C-v>(windows下是<C-q>)
11.字符串替换
:[range]s/from/to/[flag] → 将"from"替换为"to",其中
- [range]有以下一些取值:
- 无 → 默认为光标所在的行。
- . → 光标所在的行。
- 1 → 第一行。
- $ → 最后一行。
- 33 → 第33行。
- 'a → 标记a所在的行(之前要使用ma做过标记)。
- .+1 → 当前光标所在行的下面一行。
- $-1 → 倒数第二行。(这里说明我们可以对某一行加减某个数值来取得相对的行)。
- 22,33 → 第22~33行。
- 1,$ → 第1行 到 最后一行。
- 1,. → 第1行 到 当前行。
- .,$ → 当前行 到 最后一行。
- 'a,'b → 标记a所在的行 到 标记b所在的行。
- % → 所有行(与 1,$ 等价)。
- ?str? → 从当前位置向上搜索,找到的第一个str所在的行。(其中str可以是字符串或者正则表达式。)
- /str/ → 从当前位置向下搜索,找到的第一个str所在的行。(其中str可以是字符串或者正则表达式。)
- [flag]有以下取值
- 无 → 只对指定范围内的第一个匹配项进行替换。
- g → 对指定范围内的所有匹配项进行替换。
- c → 在替换前请求用户确认。
- e → 忽略执行过程中的错误。