初阶篇
1.选择(按行、按列)
v 字符选择,将游标经过的地方反白选择!
V 行选择,将游标经过的地方反白选择!
Ctrl+v 以光标当前位置及当前行首为矩形顶边,移动光标时,如果是左右移动,则改变顶边的宽度,如果是上下移动则是改变侧边的高度
2.剪切
dd |
剪切当前行 |
ndd |
剪切n行 |
dw |
从光标处剪切至一个单子/单词的末尾,包括空格 |
de |
从光标处剪切至一个单子/单词的末尾,不包括空格 |
d$ |
从当前光标剪切到行末 |
d0 |
从当前光标位置(不包括光标位置)剪切之行首 |
d3l |
从光标位置(包括光标位置)向右剪切3个字符 |
d5G |
将当前行(包括当前行)至第5行(不包括它)剪切 |
d3B |
从当前光标位置(不包括光标位置)反向剪切3个单词 |
dH |
剪切从当前行至所显示屏幕顶行的全部行 |
dM |
剪切从当前行至命令M所指定行的全部行 |
dL |
剪切从当前行至所显示屏幕底的全部行 |
dG |
删除当前行至末尾 |
dl |
删除当前字符(与x命令功能相同) |
d0 |
删除到某一行的开始位置 |
d^ |
删除到某一行的第一个字符位置(不包括空格或TA B字符) |
dw |
删除到某个单词的结尾位置 |
d3w |
删除到第三个单词的结尾位置 |
db |
删除到某个单词的开始位置 |
dw |
删除到某个以空格作为分隔符的单词的结尾位置 |
dW |
删除到某个以空格作为分隔符的单词的开始位置 |
d7B |
删除到前面7个以空格作为分隔符的单词的开始位置 |
d) |
删除到某个语句的结尾位置 |
d4) |
删除到第四个语句的结尾位置 |
d( |
删除到某个语句的开始位置 |
d} |
删除到某个段落的结尾位置 |
d{ |
删除到某个段落的开始位置 |
d7{ |
删除到当前段落起始位置之前的第7个段落位置 |
dd |
删除当前行 |
d /text |
删除从文本中出现“ t e x t”中所指定字样的位置,一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容 |
d /fc |
删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容 |
d tc |
删除当前行直到下一个字符“ c”所出现位置之间的内容 |
D |
删除到某一行的结尾 |
d $ |
删除到某一行的结尾 |
5dd |
删除从当前行所开始的5行内容 |
dL |
删除直到屏幕上最后一行的内容 |
dH |
删除直到屏幕上第一行的内容 |
dG |
删除直到工作缓存区结尾的内容 |
d1G |
删除直到工作缓存区开始的内容 |
3.修改
cl |
更改当前字符 |
cw |
修改到某个单词的结尾位置 |
c3w |
修改到第三个单词的结尾位置 |
cb |
修改到某个单词的开始位置 |
cW |
修改到某个以空格作为分隔符的单词的结尾位置 |
cB |
修改到某个以空格作为分隔符的单词的开始位置 |
c7B |
修改到前面7个以空格作为分隔符的单词的开始位置 |
c0 |
修改到某行的结尾位置 |
c) |
修改到某个语句的结尾位置 |
c4) |
修改到第四个语句的结尾位置 |
c( |
修改到某个语句的开始位置 |
c} |
修改到某个段落的结尾位置 |
c{ |
修改到某个段落的开始位置 |
c7{ |
修改到当前段落起始位置之前的第7个段落位置 |
c tc |
修改当前行直到下一个字符c所出现位置之间的内容 |
C |
修改到某一行的结尾 |
cc |
修改当前行 |
5cc |
修改从当前行所开始的5行内容 |
. |
重复上一次修改! |
4.复制
yy |
复制当前行 |
nyy |
n表示大于1的数字,复制n行 |
yw |
从光标处复制至一个单子/单词的末尾,包括空格 |
ye |
从光标处复制至一个单子/单词的末尾,不包括空格 |
y$ |
从当前光标复制到行末 |
y0 |
从当前光标位置(不包括光标位置)复制之行首 |
y3l |
从光标位置(包括光标位置)向右复制3个字符 |
y5G |
将当前行(包括当前行)至第5行(不包括它)复制 |
y3B |
从当前光标位置(不包括光标位置)反向复制3个单词 |
J |
当前行与下一行合并 |
5.缩进
:n1,n2< |
n1,n2之间代码左缩进1个TAB位置 |
:n1,n2<< |
n1,n2之间代码左缩进2个TAB位置 |
:n1,n2<<< |
n1,n2之间代码左缩进3个TAB位置 |
== |
对当前行自动缩进 |
n== |
从当前行起的下面n行自动缩进 |
gg=G |
对整篇代码自动缩进 |
6.查找替换
:%s/source/dist[/g]或者:1,$ s/source/dist[/g] |
全文字眼替换,/g为替换所有 |
:s/vivian/sky/ |
替换当前行第一个 vivian 为 sky |
:s/vivian/sky/g |
替换当前行所有 vivian 为 sky |
:n,$s/vivian/sky/ |
替换第 n 行开始到最后一行(第一个) |
:n,$s/vivian/sky/g |
替换第 n 行开始到最后一行(所有) |
:.,$s/vivian/sky/g |
从当前行开始到最后一行 |
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) |
替换每一行的第一个 vivian 为 sky |
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) |
替换每一行中所有 vivian 为 sky |
:s#vivian/#sky/# |
替换当前行第一个 vivian/ 为 sky/ |
:%s+/oradata/apras/+/user01/apras1+ |
/oradata/apras/替换成/user01/apras1/ |
中阶篇
1. 删除文本中的^M
:%s/\r//g
其他方案:
cat filename1 | tr -d “^V^M” > newfile |
sed -e “s/^V^M//” filename > outputfilename |
%s/^V^M// |
%s/^M$//g |
tr -d "/r" < src >dest |
tr -d "/015" dest |
strings A>B |
dos2unix filename filename2/unix2dos filename filename2 |
$s/^M//g |
2.交换两个字符位置
xp(x剪切当前字符,X是剪切当前字符前一个字符,p是粘贴,默认是在当前字符右边,P是默认粘贴在当前字符左边,所以xP就保持不变),这个主要告诉我们要灵活使用vi的命令。
3.把文件内容反转(按行翻转)
:g/^/m0/
4.定义你当前 键盘命令
:map keys new_seq
5.光标控制
H,j,k,l
Nh,nj,nk,nl
6.
在当前屏幕中
H 跳到第一行
M 跳到中间一行
L 跳到最后一行
7.如何在“unix命令行”下将一个文件的某字符串用另一个串换掉
sed 's/string1/string2/gp' file1 >; file2
高阶篇
1.寄存器相关
如果只是想使用系统粘贴板的话直接在输入模式按Shift+Inset就可以了,vim帮助文档里与粘贴板有关的内容如下:
vim有12个粘贴板,分别是0、1、2、...、9、a、“、+;用:reg命令可以查看各个粘贴板里的内容。在vim中简单用y只是复制到“(双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容;
要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容,然后按"Ny完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按"ay就可以了,有两点需要说明一下:
“号粘贴板(临时粘贴板)比较特殊,直接按y就复制到这个粘贴板中了,直接按p就粘贴这个粘贴板中的内容;
+号粘贴板是系统粘贴板,用"+y将内容复制到该粘贴板后可以使用Ctrl+V将其粘贴到其他文档(如firefox、gedit)中,同理,要把在其他地方用Ctrl+C或右键复制的内容复制到vim中,需要在正常模式下按"+p;
要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p将系统全局粘贴板里的内容粘贴进来。
2.分屏
ctrl+w,v |
同一个文件左右分屏 |
:vs filename |
多个文件左右分屏 |
ctrl+w,w/ctrl+w,h/ctrl+w,l |
多个屏之间切换 |
ctrl+w,o |
关闭所有只保留当前文件 |
3.保存退出
常规::wq,快捷键:ZZ,
如果用到ctrl+z,这个是挂起命令,之后可以用jobs查看任务,然后用fg number调出之前挂起的任务继续进行。