一、介绍
模式
通过ESC
在模式间切换。
1.命令模式, 输入:后进入命令模式,可以执行查找等操作
2.普通模式,默认进去是普通模式,可通过y p d等执行复制、粘贴、删除等操作。在此模式下,按V进入可视模式,可以选中字符,ctrl+v可以矩形选择
3.编辑模式,按I i a A O a 均可进入编辑模式
配置
打开 ~/.vimrc
二、操作
1.文件
打开文件
打开文件:终端下面敲 gvim file1
一次性打开多个文件 gvim file1 file2 ... filen
,然后 :ls
,再 :bn
即可显示序号n的文件
左右分屏打开文件 gvim -On file1 file2 ... filen
上下分屏打开文件 gvim -on file1 file2 ... filen
另存为file :saveas file
放弃对文件的所有修改,恢复文件到上次保存的位置 :e!
分屏
当前文件上下分屏 ctrl + w
再按s
,或 :sp
和同一文件夹下的a.sv比较(上下) :sp ./a.sv
或 : ./
然后找到a.sv回车打开
当前文件左右分屏 ctrl + w
再按v
,或 :vsp
和同一文件夹下的a.sv比较(左右) :vsp ./a.sv
或 :vsp ./
然后找到a.sv回车打开
切换分屏: ctrl+w
,再按 h
左, l
右, j
下, k
上,w
窗口循环切换
ctrl + w H L J K 是上下和左右间移动分屏
关闭当前窗口分屏:ctrl+w
,再按 c
向右或向下方交换窗口:Ctrl + w + r
而Ctrl + w + R则和它方向相反。
交换同列或同行的窗口的位置:Ctrl + w + x
显示
分行显示 :set wrap
不分行显示 :set nowrap
对比文件
直接打开两个文件对比 gvim -d file1 file2
或 gvimdiff file1 file2
直接对比两个文件的不同,分别在两个窗口输入 :diffthis
将差异点的当前文档内容合并到另外一个文档 dp
将差异点的另一个文档内容拷贝到当前文档 do
定位到不同点:
跳到前一个不同点 [c
跳到后一个不同点 ]c
2.移动、跳转
光标移动到屏幕中间 zz
光标移动到屏幕中间 zt
光标移动到屏幕底部 zb
查看下一页 crtl+f
查看上一页 ctrl+b
移动到行第一个字符 0
或 键盘Home
键
移动到行第一个非空白字符 ^
移动到行最后一个字符 $
或 键盘End
键
跳到文件首 gg
跳到文件尾 G
跳到特定n行(代码调试常用)nG
或 ngg
或:n
往下跳n行 n+回车
跳到大约N%的位置 N%
跳到匹配的括号 %
跳到视野内顶部 H
跳到视野内中间 M
跳到视野内下面 L
上k
下j
左h
右l
在命令前加上数字代表命令执行次数,如:5k,表示上移5行
3.查找替换、查找删除
查找
查找str /str
,n
找下一个匹配, N
找上一个匹配
查找str时不区分大小写 /str\c
替换
全文替换:%s/from/to/g
全文所有行第一次出现的替换 %s/from/to
当前光标所在行替换 :s/from/to/g
m到n行替换 :m,ns/from/to/g
全文替换并且需要确认:%s/from/to/gc
选择可视区域后输入:
,自动补全为 :‘<,’>
,然后:‘<,’>s/from/to/g
最后一个/
g
是global,没有g则只替换行中第一次出现的目标
i
大小写不敏感查找
I
大小写敏感查找
c
需要确认
统计"字符串"在当前编辑文件出现的次数 :%s/字符串//gn
统计m到n行中"字符串"出现的次数 :m,ns/<字符串>//gn
在每行行首添加相同的内容:
[plain] view plain copy
:%s/^/要添加的内容
在每行行尾添加相同的内容:
[plain] view plain copy
:%s/$/要添加的内容
二、利用正则表达式删除代码段每行的行号
[plain] view plain copy
:%s/^\s*[0-9]\s//gc
其中,表示行首,$表示行尾,\s表示空格,[0-9]表示0~9的数字,*表示0或多个,%s/\s*[0-9]\s//gc的意思是将每行以0或多个空格开始中间包含0或多个数字并以0或多个空格结束的字符串替换为空。
4.编辑
插入
光标前 i
光标所在行首 I
光标后 a
光标所在行尾 A
光标所在下一行行首 o
光标所在上一行行首 O
删除光标所在处字符然后插入 s
删除光标所在行然后插入 S
或 cc
删除从光标处开始到该单词结束的所有字符然后插入cw
修改到行尾的内容 c$
上下两行交换 ddp
编辑模式下输入str1后按空格,会自动替换成str2 :ab str1 str2
选中当前单词 viw
删除 | 复制 |
---|---|
删除当前单词 daw | 复制当前单词 yaw |
删除光标所在处到单词结尾 dw | 复制光标所在处到单词结尾 yw |
删除n个单词 dnw | 复制n个单词 ynw |
删除光标到行尾 d$ | 复制光标到行尾 y$ |
删除当前行到文本开始的文本 dH | 复制当前行到文本开始的文本 yH |
删除当前行到文本结尾的文本 dG | 复制当前行到文本结尾的文本 yG |
删除m到n行 :m,nd | 复制m到n行 :m,ny |
删除一行 dd | 复制一行yy |
删除n行 ndd | 复制n行nyy |
删除光标处到下一个a的字符处 dfa | 复制光标处到下一个a的字符处 yfa |
删除光标到第n个a的字符处 dnfa | 复制光标到第n个a的字符处 dnfa |
粘贴在光标后p
粘贴再光标前 P
删除当前字符 x
删除包含字符串str的行 :g/str/d
删除不含有字符串str的行 :v/str/d
替换当前字符 r
连续替换字符 R
插入
i 光标前
I 光标所在行首
a 光标后
A 光标所在行尾
o光标所在下一行行首
O 光标所在上一行行首
s删除光标所在处字符然后插入
S删除光标所在行,然后插入
cw 删除从光标处开始到该单词结束的所有字符,然后插入
大小写转换
不区分大小写 :setic
区分大小写 :set noic
单词变小写 u
单词变大写 shift+u
将光标下的字母改变大小写 ~
从光标开始的n字母改变大小写 n~
改变当前行字母的大小写 g~~
将当前行的字母改成大写 gUU
将当前行的字母全都改成小写 guu
将从光标开始下面n行字母改成大写 ngUU
将光标下的字母改成大写 gUw
将光标下的字母改成小写 guw
自动向上查找补全 ctrl+p
自动向下查找补全 ctrl+n
撤销
撤销刚才操作 u
恢复撤销操作 ctrl+r
重复
重复上一个操作的命令 .
重复某个命令n次 n<命令>
5.行列操作
把几行代码左右移4格
:set shiftwidth=4
选中要移动的代码
shift+>
(向右缩进) ,shift+<
(向左缩进)
:10,100>
第10行至第100行缩进
:20,80<
第20行至第80行反缩进
列选择模式
ctrl+v
6.定义快捷键
通过ctrl + v + 任意26个英文字母之一,可以形成快键键
:map ^M I#<ESC>
^M 是按ctrl+v+m
表示ctrl+m
快捷键为在当前光标所在行首插入#并退出编辑模式
7.可视化
行可视化 V
可视化 v
块可视化 ctrl+v
再按一次是退出可视化
选中括号/引号内所有文本,包括括号/引号 va+引号/括号
选中括号/引号内所有文本,不包括括号/引号 vi+引号括号
8.宏录制
启动宏录制 q
,再按一个字母,相当于起个名字,此时命令行提示
recording @字母,开始宏录制,执行完要录的操作
按q
录出录制
使用宏录制
执行宏录制的操作 @字母
对上一次宏使用的重复操作 @@
执行n次宏录制的动作 n@字母