1. vi基本用法
vim命令退出插入模式
命令
意义
u
撤销
ctrl+r
回复撤销的东西
i
进入insert模式
o
在当前行下面另起一行,并进入insert模式
O
在当前行上面另起一行,并进入insert模式
:wq/q!
qw保存并退出;q!强制退出,不保存所有修改;w保存,不退出,可以被撤销
ZZ
保存并退出vim,不能被撤销
w
将光标向右移动到下一个word的首字符上
nw
将光标向右移动到第n个word的首字符上
b/nb
将光标向左移动到下一/n个word的首字符上
e/ge
将光标向右/左移动到下一个word的最后一个字符上
$/n$
将光标移动到 当前行/第n行 行尾
0
将光标移动到当前行行首
fx/nfx
向右查 下一个/第n个 x字符,F大写时向左;只能在当前行查
%
跳转到对应的括号上,包括(),{},[],<>等
nG/G/gg
跳转到第n行/最后一行/第一行
‘’
回到跳转之前的行首
n%
跳转到文件的某个百分比位置上,eg:50%,跳转到文件的中间位置
H/M/L
跳转到当前页面的开头/中间/结尾处
:set number
显示行号;set nonumber关闭显示行号
ctrl o
跳转到更早之前的位置
ctrl i
ctrl o的反操作
ma
将当前光标的位置标记为a,一共可以使用a~z 26个标记
`a
去到标记的a位置
:marks
会显示一些关于标记的列表
dne/dnw
删除n个word,dne不会删除最后一个单词后面的空格,dnw会
cnw
删除n个word并进入insert模式
dd/cc
删除整行/删除后在该行进入insert模式,并保留原来的缩进
v
进入visual模式,选择文本
ctrl v
进入纵向选择模式,o让光标移到选中文本的另一头,O在光标所在行的选中文本的首尾进行移动;选好后I 进入纵向编辑模式;
yy
复制当前行
dd
剪切当前行
p
将之前复制的或者删除的行,在光标所在行的下一行进行粘贴
ynw/yne
复制n个word,yne不带最后一个word后的空格,ynw带;复制后可以使用p粘贴
daw
删除光标所在位置的整个word
set textwidth=40
将每一行的宽度设置为40个字符
:1,5center 40
第一到第五行居中,每行的宽度为40个字符
:1,5right 40
:1,5left 5
左对齐的时候,最后一个数字不是行宽而是左边缩进的空格数
set virtualedit=all
可以在任意位置插入文字
set virtualedit=
恢复正常模式
:saveas /:file
将文件重命名,会自动复制并重命名,saveas会保存并重命名,file只重命名不保存
gf
打开光标所在路径对应的文件
:ls  :b2
2. 搜索和正则表达式
/字符串
在文本中查该字符串,遇到 .*[]^%??~$等特殊符号,要在这些字符前加一个反斜杠\
/\<字符串\>
完全只匹配该字符串
/^字符串
匹配在行首出现的字符串
/字符串$
匹配在行尾出现的字符串,字符串后面不能有多余空格
/^字符串$
匹配只有该字符串的行
/\c字符串
忽略大小写匹配字符串;等同于:set ignorecase;
/\C字符串
大小写敏感;等同于 set noignorecase
:set ignorecase smartcase
在字符串为全小写的时候忽略大小写;
字符串中有大写字母时候,大小写敏感
/字符串/n
光标停在搜索的字符串下第n行行首
/字符串/e
光标停在搜索的字符串的最后一个字符上
/字符串/e+1
光标停在搜索的字符串的最后一个字符后下一个字符上
/字符串/b+1
光标停在搜索的字符串的第一个字符后下一个字符上
?字符串
反向搜索
/字符*
可以匹配该字符的多次重复,会匹配到空字符
/字符\+
匹配该字符的一次或多次重复,不会匹配到空字符
/\(字符串\)*
字符串整体重复多次,也会匹配空字符
/\{m,n}
匹配重复m到n次的字符或者字符串
/a.\{m,n}b
a隔m到n个字符b的字符串
/a.\{-2,4}b
如果出现awubbbbb只会匹配其中的awub
/字符串1\|字符串2
同时匹配字符串1和字符串2
/end\(if\|while)
可以匹配到:endif,endwhile
/forever\&for
只匹配forever中的for
/[a-z0-9]
匹配所有字母和数字
/”[^”]*”
[^”]:表示除 ” 外的任何字符
\n
匹配断行
\_s
匹配空格或断行
\_
一般很多匹配选项都可以加上 \_ 来包括断行
\_.
可以匹配所有内容
3. 替换
:%s/a/b/g
将文件中的所有a 替换成b
:%s/a/b/gc
将文件中的所有a 替换成b,每次替换都会询问是否替换
:%s/\<word1\>/word2/gc
只匹配整个word1而不会匹配包含word1的其他word
:n1,n2 s/word1/word2/gc
将第n1行到第n2行的word1替换为word2
如果要对多个文本文件执行相同的替换命令,可以使用宏:
qu
在打开的任意文件下输入qu表示开始记录宏,将后续的操作记录在名为u的宏中
q
执行完你要进行的一系列操作后,再输入q停止宏记录
@u
当你要在其他文本执行你保存的那一系列操作的时候,只需要输入@q
eg:将hello word调换位置为word hello
:%s/\([^ ]*\) \(.*\)/\2 \1/gc
eg:将rst改成 .rst(rst)
:%s/\([^ ]*\)/\.\1\(\1)/gc
:%s/^\s\+//gc    :删掉行首的一个或多个空格
:%s/\s\+$//gc    :删掉行尾的一个或多个空格
:%s/\s\+//gc    :删掉所有的空格
:%s/word/\r/g  :将word替换为换行符
4. 分隔窗口,对比
:split
打开一个新窗口(将屏幕分为上下两个窗口)
:split文件1
在新窗口打开文件1
:vsplit
将屏幕分为左右两个窗口
:close
关闭一个打开的窗口,也可以使用:q,:wq等
:only
关闭除当前窗口外的所有窗口
ctrl ww
在打开的一堆窗口中切换
ctrl^
在打开的2个文件中切换
:n :b
下一个文件,上一个文件
:wall
保存所有窗口的修改
:qall
退出所有
vim –o a b c
分别为a b c开一个窗口(上下分割)
vim –O a b c
分别为a b c开一个窗口(左右分割)
vimdiff a b
打开并对比a b文件
:diffsplit b
在打开的a文件下输入该命令,可以直接打开并对比(上下窗口)
:vertical diffsplit b
左右窗口
]c
下一个不同
[c
上一个不同
dp
do
:g
行操作,
:v
gf
go file
Thanks END

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。