1. 查看
1.1 移动光标
w/W, b/B
移动到下一单词、上一单词的开头,e/E
移动到下一单词的结尾,大写空格分割,小写非字母分割$, ^
行尾 行首,0
行间第一个字符Ctrl+f/b
翻页,Ctrl+d/u
翻半页,Ctrl+e/y
上下滚动一行数字+方向键
移动多次(数字+cmd
执行多次cmd)gg, G
文件首尾50%
移动到文件50%的位置,:50
移动到第50行,.
表示当前行号,$
表示最后一行的行号/pattern
正则匹配查找,n/N
上下跳转- 光标移动到括号上时,使用
%
进行括号配对
1.2 文件编码
:set fileencoding
查看当前文件编码:e ++enc=utf-8
使用utf-8重新打开文件
1.3 显示
:set nu, :set nonu
显示/不显示行号,在~/.vimrc
中设置set nu
持久化设置Ctrl+G
显示当前状态
1.4 分屏
- 打开
vim -O file1 file2
打开多个文本(-O
垂直分屏,-o
水平分屏):vs file
在当前vim中打开file的垂直分屏,:sp file
在当前vim中打开file的水平分屏Ctrl+w v/s
复制当前屏为相同垂直分屏或水平分屏:new newfile
在vim中创建新文本并创建分屏
- 切换
Ctrl+w+w
切换下一个Ctrl+w+h/j/k/l
,hl左右,jk上下
- 改变位置
Ctrl+w Shift+h/j/k/l
,当前屏左上下右移动
- 改变大小
Ctrl+w Shift+|
水平加宽,Ctrl+w Shift+_
垂直加宽,Ctrl+w =
重置大小Ctrl+w n +
增加高度n,Ctrl+w n -
减少高度n,Ctrl+w n Shift+<
界线左移n,Ctrl+w n Shift+>
界线右移n
- 关闭
Ctrl+w c
关闭当前分屏Ctrl+w o
只保留当前分屏
2. 编辑
2.1 进入编辑模式
i
光标处插入,a
光标右边插入,o,O
下面、上面另起一行,I,A
行首尾插入
2.2 简单编辑
2.2.1 选中:v
v, V, Ctrl+v
字符、行、块选中- 可以结合
w/W, b/B, e/E
- 结合text object
2.2.2 text object
包括范围和文本对象,可以结合各种操作使用
- 范围:
i
:inner,a
:around - 文本对象:
w
:word,s
:sentence,各种括号引号
2.2.3 删除和剪切:d
删除将内容复制到匿名寄存器中(即剪切),可以使用黑洞寄存器
"_
避免剪切内容不剪切的删除(将删除内容复制到黑洞寄存器中,相当于不保存):
"_cmd
,其中cmd是删除相关的命令,eg:"_x
使用键盘映射实现更简便的写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
"在~/.vimrc中,将删除映射为不剪切的删除,剪切映射为删除命令前加前缀" let mapleader = "," nnoremap x "_x nnoremap X "_X nnoremap d "_d nnoremap dd "_dd nnoremap D "_D vnoremap d "_d vnoremap dd "_dd "<leader>是前缀,通过mapleader设定" nnoremap <leader>x ""x nnoremap <leader>X ""X nnoremap <leader>d ""d nnoremap <leader>dd ""dd nnoremap <leader>D ""D vnoremap <leader>d ""d vnoremap <leader>dd ""dd
在
~/.vimrc
中输入:source ~/.vimrc
使设定生效在vim中输入
:map
查看当前的键盘映射
D, d$
删除光标至行尾,dd
删除当前行x
删除当前字符,daw
删除单词及后面的空格,diw
删除单词,结合text object:m,nd
删除m-n行s
删除字符并插入,S
清空行并插入先选中,然后
x
删除选中部分,D
删除选中行
2.2.4 复制:y
yy
复制当前行,:m,ny
复制m-n行到剪贴板- 结合text object
2.2.5 粘贴:p
p,P
粘贴到光标处/后m,ncok
复制m-n行到k行下一行m,nmk
移动m-n行到k行下一行
2.2.6 搜索
/pattern
匹配,n, N
下一个上一个匹配对象*, #
匹配下一个,上一个相同的单词
2.2.7 替换:c
- 结合text object
r
单字符替换,R
字符串替换[range]s/pattern/replace/[flags]
[range]
:%
(全文),.
,m,n
,m
[flags]
:g
全局替换,c
替换前询问,不写默认替换首个
2.2.8 撤销重做
u
撤销Ctrl+r
重做
2.2.9 批量注释
- 方法一:
- 注释:
Ctrl+v
选择,Shift+i
进入编辑模式,输入插入的字符比如#
,再两次Esc
- 取消注释:
Ctrl+v
选择,x
或d
删除(就是选择然后删除)
- 注释:
- 方法二:正则替换
- 注释:
:m,ns/^/#/g
- 取消注释:
:m,ns/^#//g
(替换成空白)
- 注释:
2.2.10 其他
J
将当前行下面的行合并到当前行