:sh 开始一个shell命令行,ctr-D 回到vi
ctrl+z & fg 在vi中,可以ctr-z suspend vi进入命令行,然后fg回到vi
:verbose set option? 查看这个option是什么值,在那个配置文件里设置的
:script 查看vim加载的配置脚本
$vim -u 加载vim配置文件,比如vim -u ~/.vimrc
$vim -u NONE 什么都不加载
K 看光标所指的标识符的 man文件
z <enter> 把当前行移到屏幕的开始(zt)
z. 把当前行移动屏幕的中间(zz)
z- 把当前行移动到屏幕的底部(zb)
ctrl + L 重绘当前页面
H 移动光标到屏幕顶
L 移动光标到屏幕底
M 移动光标到屏幕中
`` 返回光标移动前的位置
ctrl+E 向上滚动屏幕,光标所在行的位置不变
ctrl+Y 向下滚动屏幕,光标所在行的位置不变
ctrl+D 向下滚动半屏
ctrl+F 向下滚动一屏
ctrl+U 向上滚动半屏
ctrl+B 向上滚动一屏
:ju[mps] 打出跳转表
ctrl+O 转到跳转表里第 [count] 个较旧的光标位置
ctrl+I 转到跳转表里第 [count] 个较新的光标位置
'0 打开一个以前打开过文件,按'0可以把光标回到最后退出文件时光标所在的位置
gd Goto local Declaration
gD Goto global Declaration
gf Goto file
[I Display all lines that contain the keyword under the cursor
ctrl+] 跳到函数定义,根据tag来跳转
ctrl+T 和ctrl+]相反
0 数字零,到行头
^ 到本行第一个不是blank字符的位置
$ 到本行行尾
g_ 到本行最后一个不是blank字符的位置
% 匹配括号移动,包括 (, {, [. (需要把光标先移到括号上)
f[F]x 在光标所在行进行查找, 查找光标右(左)方第一个x字符.
t[T]x
\c 不区分大小写
q: 搜索历史命令记录
q/ 搜索历史搜索记录
J 合并两行
$ 代表文件的最后一行
% 代表文件里的所有行
. 在命令行代表当前行
d 在命令行代表删除(delete)
m 在命令行代表移动(move)
co 在命令行代表拷贝(copy)
:.,$d 从当前行删除到文件结尾
:%d 删除整个文件内容
:m+ 把当前行下移一行
:n,.m$ 把n行到当前行的内容移动到文件末尾
:.,+md 把从当前行开始的m行删除
:m,$m.-n 把m行到文件结尾的行移动到当前行的前面n行处
:/p/d 把下一个匹配的行删除
:/p/+d 把下一个匹配的下一行删除
:m,ns/x/y/gc m至n行用y替换x,替换之前确认
:g/pattern/s/old/new/g 第一个g意思是对全部的行,第二个g是在同一匹配到的行内进行所有替换
:g/^/m0 把文件倒序(第一行变成最后一行)
:%s/string/&/gn 统计string出现的次数
:20,30!sort 20至30行排序
\n 会被第n个匹配替换
& 会被整个匹配替换
\u 或者 \l 把下一个字符转换为大写或者小写
\U 或者 \L \e \E把下面的字符置换为大家或者小写直到匹配的末尾或者是遇到\e 或\E
:%s/Fortran/\U&/ 把所有的Fortran转换为FORTRAN
/s 分隔符可以为 # $ 等
~ 是改变大小写
:e! 是回退所有从上次保存以来所有的更改
d?move 从当前光标处向前删除直到move
V 选中当前行
yy或Y 复制当前行
qa 开始record到a
q 退出record
@a 重放record a
ctrl+N 补全, 根据当前文档里已经出现的来补全
ctrl+P
<< 向左缩进
>> 向右缩进
Ctrl+A / Ctrl+X
increments/decrements a number.
!)tr '[:lower:]' '[:upper:]' 把下面一段从小写变成大写
vi +n file 在第n行打开文件file
vi +/pattern file 在第一次匹配的地方打开file
vi -R file 以只读的方式打开file(相当于view file?)
:230,$w newfile 把230行到文件末尾保存到newfile里
:340,$w >>newfile 把340行到文件末尾追加到newfile里
:185r newfile 把newfile的内容读进当前文件的185行处
vi file1 file2 ...编辑文件1 2 。。。
:n 编辑下一下文件
:rew rewind to file1
:last to last file
:args (:ar) 列出当前vi打开的文件(当前打开的文件用[])
:ls 列出buffer,作用同args
:b {number, expression}
编辑buffer里第number个文件,number可为2,3,4.。。
:bn[ext] 下一个缓冲区
:bp[revious]上一个缓冲区
:bd tab ... 删除buffer
:bw tab ... 清空buffer
% (current filename)
# (alternate filename)
ctrl+^ 在current和alternate之间切换
:e file 编辑文件file
:w %.new 把当前文件重命名为filename.new
:reg 查看粘贴
vi 默认用1-9到命名九个粘贴板
"2p 把粘贴板 2 里的内容粘贴出来
"ayy 把当前行放进命名buffer a里
"A 当用大写字母命名一个粘贴板时,粘贴板里的内容是append的方式添加
"Z5dd 删除五行,然后把这五行append到用Z命名的buffer中
mx 用x来标记当前光标的位置,x可以为任何字母
mX 用X来标记一个文件,X为任何大字字母,这个标记可以用文件间跳转
'x 返回标记所在的行
`x 光标返回标记
v 进入visual模式
ctrl+v 区块选取
< > 在visual模式下左右缩进选中的文本
= 在visual模式下自动缩进选中的文本
vi 在ex模式下,按vi回到vi
:= 显示文件的总行数
:.= 显示当前的行数
ctrl+G 同上
Q 进入ex模式
:1,10# 显示1到10行
:/pattern/= 显示第一次匹配到的行数
:/pattern1/,/pattern2/d 把下一个匹配到pattern1到下一个匹配到pattern2的行删除
在vi中执行命令:
:r !date 把date输出写到vi光标处
:96,99!sort 96到99行排序
:ab abbr long command 把long command用abbr来代替
:unab abbr 取消abbr
:map v dwelp交换单词
:unmap
vim 新增的motion
count% 把光标移动到count%行处
:help text-objects 查看text-object帮助
aw 包括单词前后空格
iw 不包括单词前后空格
as 一个句子
is inner sentense
a” a double quoted string
i” inner double quoted string
a’ a single quoted string
i’ inner single quoted string
a` a back quoted string
i` inner back quoted string
a) a parenthesized block
i) inner parenthesized block
a] a bracketed block
i] inner bracketed block
a} a brace block
i} inner brace block
vim -o file1 file2 打开multiwindow
:sp[lit] 分隔两个水平窗口
:vs[plit] 分隔出两个垂直窗口
:new 打开一个水平分隔的窗口
Ctrl+w s 水平分割当前窗口
Ctrl+w v 垂直分割当前窗口
Ctrl+w q 关闭当前窗口
Ctrl+w n 打开一个新窗口(空文件)
Ctrl+w o 关闭出当前窗口之外的所有窗口
Ctrl+w T 当前窗口移动到新标签页
Ctrl+w h 切换到左边窗口
Ctrl+w j 切换到下边窗口
Ctrl+w k 切换到上边窗口
Ctrl+w l 切换到右边窗口
Ctrl+w w 遍历切换窗口
Ctrl+w t 把光标移动到左上角的窗口(t = top)
Ctrl+w b 把光标移动到右下角的窗口(b = bottom)
Ctrl+w H 向左移动当前窗口
Ctrl+w J 向下移动当前窗口
Ctrl+w K 向上移动当前窗口
Ctrl+w L 向右移动当前窗口
Ctrl+w + 增加窗口高度
Ctrl+w - 减小窗口高度
Ctrl+w = 统一窗口高度
za 打开或者关闭折叠
zM 折叠所有
zR 打开所有折叠