vim编辑区的常用模式有3种:
i 进入):输入文字;v 进入):选择文本。任何时候,只要按下 ESC 键,就会回到标准模式。由于在该模式下可以任意移动光标,并且能够方便地转换到其他各种模式,所以用好vim的一条重要原则是:尽量多使用标准模式。能在标准模式下做的事,就不要在其他模式下做。
执行
vim [文件名]
后进入的就是标准模式。在该模式下,我们可以使用 h、j、k 和 l 这四个按键来移动光标。其中 h 、l 控制的是左、右,j 、k 控制的是下、上。当然你也可以通过方向键来移动光标。
仅仅有这些是不够的,我们还需要更多的快捷指令:
| 命令 | 功能 |
|---|---|
gg | 移动光标至第一行的第一个字符处 |
G | 移动光标至最后一行的第一个字符处 |
[n]G | 跳转到第 [n] 行。例如跳转到第三行就是 3G |
[n]% | 跳转到文档的百分之 [n] 部分 |
b / w | 向前 / 后移动到下一个单词的首字符 |
B / W | 向前 / 后移动到下一个WORD的首字符 |
ge / e | 向前 / 后移动到下一个单词的结尾字符 |
gE / E | 向前 / 后移动到下一个WORD的结尾字符 |
0 / $ | 将光标移动至行首 / 行尾 |
( / ) | 向前 / 后移动一个句子 |
{ / } | 向前 / 后移动一个段落 |
📝 需要注意的是,单词之间的分隔符是空格或标点符号(例如连字符,句号,逗号,引号等),而WORD(广义单词)的分隔符只有空格。
一个文本对象由两部分组成:修饰符和对象名称。
a 表示该对象及其后面的空格字符;i 表示对象本身。w 为单词,s 为句子,p 为段落。例如要查看一个单词对象是什么样子的,可以先按 v 进入可视化模式,然后按下 iw。下面比较 viw 和 vaw 的区别:
viw:

vaw:

常用的文本对象命令列在下表中:

对于嵌套括号,我们只需要在文本对象前加入相应的量词就可以实现不同的选中范围。
光标置于 c,输入 v2i(:

光标置于 c,输入 v2a(:

量词不仅可以放到文本对象前面,也可以放到光标移动命令前面,例如 3j 就是向下移动3行。
| 命令 | 功能 |
|---|---|
u | 撤销上一次编辑 |
ctrl + R(mac上是 control + R) | 重做,即撤销上一次撤销 |
V | 选中当前行 |
d | 剪切文本 |
y | 复制文本 |
p | 在光标后粘贴文本 |
P | 在光标前粘贴文本 |
dd | 剪切光标所在行 |
yy | 复制光标所在行 |
D | 剪切光标到行尾的文本 |
x | 剪切光标所在位置的字符 |
注意 d 和 y 无法单独使用,需要在后面跟一个移动或者文本对象。
📝 交换相邻两个字符是
xp,交换相邻两行是ddp。

从标准模式进入插入模式后,不论插入或者用退格键、删除键修改了多少
文本,都算一个编辑动作。所以我们应尽量避免在插入模式下使用方向键和删除键、退格键编辑文本,多使用标准模式,不仅编辑效率高,而且每个编辑动作改动都不大,方便进行精细的撤销 / 重做调整。
在标准模式下输入英文冒号 : 即可切换到命令模式。与编辑区模式不同,按下冒号键后窗口最底部会显示冒号,表示目前已进入命令模式了,等待继续输入后续命令。这时你可以继续输入命令,并按回车键执行,或者用 ESC 键退回标准模式。
最常用的命令为 :wq,即保存并退出。
输入 / 可进入搜索模式,例如要搜索 print,则可输入 /print 然后按下回车键,使用 n 或 N 来查看下一个/上一个匹配项。
假设我们在编辑 a.txt 的时候需要参考 b.txt 的内容。
首先使用vim打开 a.txt,然后输入 :sp 或 :vsp 进行水平或垂直切分窗口。再输入 :e b.txt 即可在当前窗口打开 b.txt。
窗口切换:
ctrl + w + h;ctrl + w + l;ctrl + w + j;ctrl + w + k;编辑完后,可输入 :wqa 保存并退出所有窗口(a 即all的意思)。
vim的配置存储在 ~/.vimrc。每次vim启动时,如果发现存在这个文件,就会执行其中的内容。任何能在vim里手动执行的命令都可以写在 .vimrc 文件里启动时自动执行,一般用来定义快捷键、函数、命令,以及设置运行时属性等。
vim基础配置:
set et
set sw=2
set ts=2
set nowrap
set number
set clipboard+=unnamedplus
set nobackup
set noswapfile
set splitbelow
set splitright
set incsearch
let mapleader=","
nnoremap ; :
nnoremap : ;
vnoremap ; :
vnoremap : ;
nnoremap <leader>e :e $MYVIMRC<CR>
nnoremap <leader>s :so $MYVIMRC<CR>
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
nnoremap <F2> :set wrap!<CR>
filetype indent plugin on
syntax on
vim键位图:
