vi/vim 命令繁多,专门介绍vi的书可以写到四五百页,但本文档主要是介绍常用和实用的一些vi操作。
另外,对vi配置文件.vimrc的适当配置可以使vi更易用更强大,所以随本文档也提供一份vi配置的安装说明。
0、vi的三种模式
三种模式是命令模式(command mode)、输入模式(input mode)、末行模式(last line mode)。
命令模式就是在vi打开一个文件后的状态,
在命令模式下输入如“2、插入”中的命令进入输入模式,
在命令模式下输入":"(shift+";:键")进入末行模式。
在输入模式和末行模式下按Esc返回命令模式。
1、快速移动
h------------光标左移一格
l------------光标右移一格
k------------光标上移一格
j------------光标下移一格
0------------光标移至行首(数字0)
$------------光标移至行首(shift + “4/$键”,注意像a和A在vim中是不一样的操作)
ctrl+f ------下翻一页(屏)
ctrl+b ------上翻一页(屏)
ctrl+d ------下翻半页(屏)
ctrl+u ------上翻半页(屏)
gg-----------移至文件第一行第一个字符处
G------------移至文件最后一行第一个字符处
20gg/20G-----移至文件的第20行
2、插入
a------------在当前光标后插入
A------------在当前光标所在行的行尾插入
i------------在当前光标前插入
o------------在当前光标所在列下新增一列并进入输入模式
O------------在当前光标所在列上方新增一列并进入输入模式
3、删除/复制/粘贴
dd-----------删除光标所在行
yy-----------复制光标所在行
p------------在当前光标的下一行粘贴你刚刚(上一次)删除或复制的行
ddp----------交换光标所在行和下一行(其实dd是把你删除的行放在寄存器中,p是粘贴寄存器的这条内容)
dgg----------删除光标所在行至首行的所有行(包括光标所在行,vi的组合键复杂而且强大)
dG-----------删除光标所在行至末行的所有行(包括光标所在行)
d0-----------删除光标所在字符前至行首的所有字符(不包括光标处字符)
d$-----------删除光标所在字符至行末的所有字符(包括光标处字符)
d2d\2dd------向下删除2行,删除3行不用说了吧
:33,40d------进入末行模式,如左所示,可以删除33-40行
x------------删除光标所在处字符(连续按的效果类似在文本中按"delete"键)
在插入模式下按Backspace键当然是可以删除光标前的字符的。
4、撤销与重做
u------------撤销刚刚的动作(undo)
ctrl+r-------重做撤销的动作(redo)
5、末行模式的基本操作
:w-----------保存
:wq/:x-------保存退出
:q!----------不保存退出
:e!----------回到文件打开时的状态(撤销所有未保存的操作)
6、察看代码跳转等
gg=G---------把整个源码自动缩进
.------------重复上一个操作(恩,你没看错。命令就是一个小数点)
%------------自动匹配花括号、方括号、括号等, 甚至#if #else #endif。光标在一个括号上面,按%,光标会跳至匹配处。
gd-----------挑战至光标所在处的函数或者变量定义处
K------------在vi中man光标所在处的词
>>-----------缩进光标所在行
<<-----------同上,反缩进
[ ctrl+i-----跳转到函数、变量声明和#define处(按[键,然后同时按下ctrl和i,下同)
[ ctrl+d-----跳转到#define处
ctrl+i-------向前跳到前几次光标位置(按几次,跳几次,下同)
ctrl+o-------向后跳到后几次光标位置
7、跳转至函数定义处
(6、)中的跳转命令如“[ ctrl+i”只能跳转至函数的声明处,要想跳转至函数实现、定义的地方,需要安装插件ctags:
以ubuntu为例,安装方法如下:
sudo apt-get install ctags
安装好后,在project下(假设project工程下有main.cpp、src/add.hpp 和 src/add.cpp三个文件)
$ ctags -R * (即可在当前目录生成tags文件,是产生的标记文件用来在源文件中定位对象)
在project目录下打开main.cpp
$vi main.cpp
进入末行模式
:set tags=./tags
将光标移至add()函数处,
ctrl + ] 即可从main.cpp 跳转至add.cpp的add()函数定义处。
ctrl + t 或 ctrl + o可以跳回main.cpp
[[---------用来跳到光标前面的一个函数开始处。如果光标在函数体内的话,那就是所在函数的开始处。
][---------用来跳到光标后面的一个函数结尾处。如果光标在函数体内的话,那就是所在函数的结尾处。
]]---------用来跳到光标后面的一个函数开始处。如果光标在函数体内的话,那就是下一个函数的开始处。
[]---------用来跳到光标前面的一个函数结尾处。如果光标在函数体内的话,那就是上一个函数的结尾处。
可以用以下办法来记住这4个命令:
1)先想是想往前跳,还是往后跳?
如果是想往前,就摁 [,如果是想往后,就摁 ],然后指头别松开。
2)再想是想到开始处,还是结尾处?
如果是开始处,就再摁一下。如果是结尾处,就摁另一个键。
8、其他
vi/vim 还有很多命令或操作,如:
:set nu #设置行号
:set hlsearch #设置高亮
...
这些常用设置都可以放到~/.vimrc中。
另外,对vi配置文件.vimrc的适当配置可以使vi更易用更强大,所以随本文档也提供一份vi配置的安装说明。
0、vi的三种模式
三种模式是命令模式(command mode)、输入模式(input mode)、末行模式(last line mode)。
命令模式就是在vi打开一个文件后的状态,
在命令模式下输入如“2、插入”中的命令进入输入模式,
在命令模式下输入":"(shift+";:键")进入末行模式。
在输入模式和末行模式下按Esc返回命令模式。
1、快速移动
h------------光标左移一格
l------------光标右移一格
k------------光标上移一格
j------------光标下移一格
0------------光标移至行首(数字0)
$------------光标移至行首(shift + “4/$键”,注意像a和A在vim中是不一样的操作)
ctrl+f ------下翻一页(屏)
ctrl+b ------上翻一页(屏)
ctrl+d ------下翻半页(屏)
ctrl+u ------上翻半页(屏)
gg-----------移至文件第一行第一个字符处
G------------移至文件最后一行第一个字符处
20gg/20G-----移至文件的第20行
2、插入
a------------在当前光标后插入
A------------在当前光标所在行的行尾插入
i------------在当前光标前插入
o------------在当前光标所在列下新增一列并进入输入模式
O------------在当前光标所在列上方新增一列并进入输入模式
3、删除/复制/粘贴
dd-----------删除光标所在行
yy-----------复制光标所在行
p------------在当前光标的下一行粘贴你刚刚(上一次)删除或复制的行
ddp----------交换光标所在行和下一行(其实dd是把你删除的行放在寄存器中,p是粘贴寄存器的这条内容)
dgg----------删除光标所在行至首行的所有行(包括光标所在行,vi的组合键复杂而且强大)
dG-----------删除光标所在行至末行的所有行(包括光标所在行)
d0-----------删除光标所在字符前至行首的所有字符(不包括光标处字符)
d$-----------删除光标所在字符至行末的所有字符(包括光标处字符)
d2d\2dd------向下删除2行,删除3行不用说了吧
:33,40d------进入末行模式,如左所示,可以删除33-40行
x------------删除光标所在处字符(连续按的效果类似在文本中按"delete"键)
在插入模式下按Backspace键当然是可以删除光标前的字符的。
4、撤销与重做
u------------撤销刚刚的动作(undo)
ctrl+r-------重做撤销的动作(redo)
5、末行模式的基本操作
:w-----------保存
:wq/:x-------保存退出
:q!----------不保存退出
:e!----------回到文件打开时的状态(撤销所有未保存的操作)
6、察看代码跳转等
gg=G---------把整个源码自动缩进
.------------重复上一个操作(恩,你没看错。命令就是一个小数点)
%------------自动匹配花括号、方括号、括号等, 甚至#if #else #endif。光标在一个括号上面,按%,光标会跳至匹配处。
gd-----------挑战至光标所在处的函数或者变量定义处
K------------在vi中man光标所在处的词
>>-----------缩进光标所在行
<<-----------同上,反缩进
[ ctrl+i-----跳转到函数、变量声明和#define处(按[键,然后同时按下ctrl和i,下同)
[ ctrl+d-----跳转到#define处
ctrl+i-------向前跳到前几次光标位置(按几次,跳几次,下同)
ctrl+o-------向后跳到后几次光标位置
7、跳转至函数定义处
(6、)中的跳转命令如“[ ctrl+i”只能跳转至函数的声明处,要想跳转至函数实现、定义的地方,需要安装插件ctags:
以ubuntu为例,安装方法如下:
sudo apt-get install ctags
安装好后,在project下(假设project工程下有main.cpp、src/add.hpp 和 src/add.cpp三个文件)
$ ctags -R * (即可在当前目录生成tags文件,是产生的标记文件用来在源文件中定位对象)
在project目录下打开main.cpp
$vi main.cpp
进入末行模式
:set tags=./tags
将光标移至add()函数处,
ctrl + ] 即可从main.cpp 跳转至add.cpp的add()函数定义处。
ctrl + t 或 ctrl + o可以跳回main.cpp
[[---------用来跳到光标前面的一个函数开始处。如果光标在函数体内的话,那就是所在函数的开始处。
][---------用来跳到光标后面的一个函数结尾处。如果光标在函数体内的话,那就是所在函数的结尾处。
]]---------用来跳到光标后面的一个函数开始处。如果光标在函数体内的话,那就是下一个函数的开始处。
[]---------用来跳到光标前面的一个函数结尾处。如果光标在函数体内的话,那就是上一个函数的结尾处。
可以用以下办法来记住这4个命令:
1)先想是想往前跳,还是往后跳?
如果是想往前,就摁 [,如果是想往后,就摁 ],然后指头别松开。
2)再想是想到开始处,还是结尾处?
如果是开始处,就再摁一下。如果是结尾处,就摁另一个键。
8、其他
vi/vim 还有很多命令或操作,如:
:set nu #设置行号
:set hlsearch #设置高亮
...
这些常用设置都可以放到~/.vimrc中。