1. 命令模式下
1. 移动光标
# 光标移动到文件开头
gg
# 光标移动到文件末尾
G
# 光标移动到行首
0
^
# 光标移动到行尾
$
# 移动到123行
123G
2. 删除与撤销
# 删除光标所在的行
dd
# 删除光标位置起的三行数据
3dd
# 删除光标到行首的所有字符
d0
d^
# 删除光标到行末的所有字符
D
d$
# 撤销
u
# 反撤销
Ctrl+r
3. 复制与粘贴
# 复制当前行
yy
# 复制三行,从光标处开始
3yy
# 粘贴:粘贴在下一行
p
4. 查找
# 从光标处查找hello; 然后按n查找下一个。N查找上一个
/hello
5. 替换
# 替换所有
:%s/good/geed/g
# 替换所有行第一个命中
:%s/good/geed
# 替换当前行所有
:s/good/geed/g
# 替换当前行第一个
:s/good/greed
2. 末行模式
1. 行跳转
# 跳到123行
:123
# 将所有行的abc替换成123
:%s/abc/123/g
# 强制退出
:q!
# 保存退出
:wq
# 水平分屏
:sp 文件名
# 垂直分屏
:vsp 文件名
# 全部保存退出
:xall
# 在两个vim分屏之间切换
ctrl+ww
2.2 inoremap命令
- 用于映射按键
- i代表再插入模式下有效
- nore表示不递归no recursiong。如inoremap Y y 和inoremap y Y并不回产生无限循环
- map表示映射
# 将{ 映射为{<enter>}<esc>kA<enter><tab>
:inoremap { {<enter>}<esc>kA<enter><tab>
2.3 查看键盘上的键对应的符号
:h key-notation
符号 | 对应的物理按键 |
<enter> | 换行 |
<tab> | 制表符 |
<esc> | esc键 |
<cr> | 也是换行 |
3. vim的配置文件
vim ~/.vimrc
" 显示行号
set nu
" tab缩进大小为4
set tabstop=4
" 语法高亮
set syntax=on
" 设置当文件被改动时自动载入
set autoread
" 根据语法折叠
set fdm=syntax
" 设置自动缩进
set autoindent
" 当检测到文件类型是c或c++,采用c缩进
:autocmd FileType c,cpp :set cindent
" 将jj映射未esc键
inoremap jj <esc>
" 把hh映射为向行首插入
inoremap hh <esc>0
" 把kk映射为向行尾插入
inoremap kk <esc>A
inoremap ( ()<esc>i
inoremap { {<enter>}<ESC>kA<enter><tab>
inoremap [ []<esc>i
inoremap ' ''<esc>i
inoremap " ""<esc>i