1. vi基本用法
命令 | 意义 |
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%,跳转到文件的中间位置 | vim命令退出插入模式
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小时内删除。
发表评论