参考:Learn Vim Progressively, 简明vim练级攻略
在shell中通过vi <path/to/file1> <path/to/file2> ...
同时打开多个文件,在vi中通过:e <path/to/file1> <path/to/file2> ...
打开文件。
:bn
和:bp
在打开的多个文件之间切换,:ls
查看当前打开的文件列表。
打开vi后就是普通模式,按i
进入插入模式,按Esc
返回普通模式,按:
进入命令行模式,输入命令运行后自动返回普通模式。
:w
是保存,:q
是退出,:x
和:wq
是保存并退出,:q!
是不保存并强制退出。
j
,k
,h
,l
分别对应上下左右,w
是移动到下一个单词开头,b
是移动到上一个单词开头。这些动作之前都可以加数字N,表示重复动作N次。
:N
或NG
移动光标到第N行,gg
移动光标到首行,G
移动光标到末行;使用<Ctrl+o>
和<Ctrl+i>
可在两点之间快速跳转。
0
和^
移动光标到行首,$
移动光标到行尾,fx
,Fx
向后或向前搜索“x”并跳转到第一个匹配项。
zz
将光标所在行重置在屏幕正中,M
移动光标到当前屏幕中间,H
,L
移动光标到当前屏幕首行或末行。
<Ctrl+d>
,<Ctrl+u>
向下或向上滚动半屏,<Ctrl+f>
,<Ctrl+b>
向下或向上滚动一屏,<Ctrl+y>
,<Ctrl+e>
向下或向上滚动一行。
i
在光标处插入字符,a
在光标后插入字符,I
,A
则是行首和行末插入,o
是在本行之后插入新行,O
是本行之前插入新行。
s
删除当前字符并插入,S
,cc
删除当前行并插入,cw
删除当前所在单词并插入,C
删除光标到行末的字符并插入,ctx
删除光标到x的字符并插入。
在插入模式,按<Ctrl+o> zz
可快速将正在输入的行重置在屏幕正中。
x
删除光标处字符,dd
删除整行,dw
删除一个单词,d$
或D
删除至行尾,d^
删除至行首,dG
删除至末行,d1G
删除至首行,ctx
删除光标到x的字符。
x
,dd
,dw
前都可以加数字N,表示重复删除动作N次。
yy
复制光标所在行,5yy
复制5行,y^
复制行首到光标之前的字符,y$
复制光标到行尾的字符,y5w
复制5个单词,yG
复制至末行,y1G
复制从首行到当前行;dd
剪切当前行。
p
粘贴至光标后。
r
替换当前字符,R
连续替换,直至按下Esc
;~
转换光标处字母大小写;uN
撤销N次操作,U
撤销当前行的所有修改,<Ctrl+r>
撤销undo。
/
表示向后查找,?
表示向前查找。
*
和#
分别表示向后和向前查找光标处的单词,g*
和g#
表示部分符合该单词即可。
%
查看匹配的括号。
在查找模式下,n
表示继续查找,N
表示反向查找。
vix
和vax
可用于快速选择一个区域,如:对于(@app.route('/', methods=['GET', 'POST']))
,当前光标位于POST的O处,则:
vi'
将选定POST
,va'
将选定'POST'
,i
表示in。
vi)
选定'/', methods=['GET', 'POST']
,v2a)
选定(@app.route('/', methods=['GET', 'POST']))
。
v
可以换成y
(复制),d
(删除),c
(删除并插入);x
可以是字符、w
(当前单词)、s
(当前句子)、p
(当前段落)等等。
v
可视化工具,在该模式下可将光标经过的地方标记反白并选定,V
按行选定,<Ctrl+v>
按块选定(与jk
等配合使用)。
对于选定的区域,可用d
删除或y
复制,J
将所有选定行连接成一行,>>
和<<
快速缩进,=
自动缩进排版。
0 <Ctrl+v> Nj I# ESC
适用于注释多行文本。0
将光标移动到行首,<Ctrl+v>
开始块操作,j
标记块,I#
插入#
,ESC
确认生效。
<Ctrl+v> Nj $ A; ESC
适用于多行文本后补充;
。<Ctrl+v>
开始块操作,j
标记块,$
将光标移动到行末,A;
插入;
,ESC
确认生效。
在插入模式下按<Ctrl+n>
,启用自动补齐功能。
:sp
或:split
为水平分屏,:vsp
或:vsplit
为垂直分屏。
<Ctrl+w>
[hjkl]
切换分屏。
<Ctrl+w>
[_|]
最大化分屏,<Ctrl+w>
[+-]
增加或减小分屏尺寸。
:set all
显示所有的设定值。
:set number
显示行号,简写nu;:set nonumber
不显示行号,简写nonu。
:set shiftwidth=4
设置>>
的缩进字符数,简写sw。
:set expandtab
将tab自动转化为空格,取消该设定为:set noexpandtab
。
:set autoindent
开启自动缩进,简写ai。
:set pastetoggle
关闭自动缩进;修改/etc/vim/vimrc,添加set pastetoggle=<F9>
,在粘贴代码前,按i
后再按F9,就可以关闭自动缩进。