初阶篇
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调出之前挂起的任务继续进行。