转载自 http://blog.csdn.net/nicky_zs/article/details/6941648
h 向左移动光标
j 向下移动光标
k 向上移动光标
l 向右移动光标
以上四个是在一行之内移动光标的方法。可直接用于normal模式,也可用在其他命令后面,表示范围,比如dl是向右删除一个字符。还可以加上计数,d3l是向右删除三个字符。有时候,长度很长的一行会被折成多行显示,要在一行之内的上下折行内移动,则使用命令gj和gk。
x 删除字符(等于dl)
dd 删除一行(同样的命令重复两次表示对整行进行操作)
u 撤销
Ctrl+r 重做
U 撤销当前一行的操作
i 插入
I 行首插入
a 追加
A 行末追加
s 替换
S 替换一行
o 另起一行
O 上面另起一行
ZZ 退出并保存
:q! 强制退出
:e! 放弃所有修改重新载入文件
:help 帮助
:help x xxx的帮助
w 向前移动一个word,光标停留在word首字符
b 向后移动一个word,光标停留在word首字符
e 向前移动一个word,光标停留在word尾字符
ge 向后移动一个word,光标停留在word尾字符
W 向前移动一个Word,光标停留在Word首字符
B 向后移动一个Word,光标停留在Word首字符
E 向前移动一个Word,光标停留在Word尾字符
gE 向后移动一个Word,光标停留在Word尾字符
$ 将光标移动到当前行行尾
^ 将光标移动到当前行行首的第一个非空白字符
0 将光标移动到当前行行首,同Home键
fx 在当前行上向右查找字符x
Fx 在当前行上向左查找字符x
tx 在当前行上向右查找字符x,并将光标停留在该字符的前一个字符上
Tx 在当前行上向左查找字符x,并将光标停留在该字符的前一个字符上
; 重复命令
, 重复命令,但是方向相反
% 跳转到当前光标的括号匹配的括号上,若当前光标不在括号上,则先找到下一个括号
G 把光标移动到最后一行
33G 把光标移动到第33行
gg 把光标移动到第一行
33gg 把光标移动到第33行
50% 把光标移动到文件50%的地方
H 把光标移动到当前屏幕的第一行
M 把光标移动到当前屏幕的最中间一行
L 把光标移动到当前屏幕的最后一行
Ctrl+G 得到当前文件的行信息
:set number 显示行号 nonumber不显示行号 ruler显示列号 noruler不显示列号
Ctrl+U 使当前文本向上滚动半屏
Ctrl+D 使当前文本向下滚动半屏
Ctrl+Y 使当前文本向上滚动一行
Ctrl+E 使当前文本向下滚动一行
Ctrl+F 使当前文本向上滚动一屏
Ctrl+B 使当前文本向下滚动一屏
zz 把当前行放在屏幕正中央
zt 把当前行放在屏幕顶端
zb 把当前行放在屏幕底端
/abc 在文本中向后查找abc
?abc 在文本中向前查找abc
n 查找下一个
N 查找上一个
:set ignorecase查找时忽略大小写 noignorecase查找时不忽略大小写
\< 标记word的开始
\> 标记word的结束 /\只会查找到the而查找不到there
* 向后查找光标所在的word,使用word标记
# 向前查找光标所在的word,使用word标记
g* 向后查找光标所在的word,不使用word标记
g# 向前查找光标所在的word,不使用word标记
:set hlsearch高亮显示结果 nohlsearch不高亮显示结果
:nohl 去掉高亮显示
:set incsearch边输入边搜索 nowrapscan文件结束时不要回到开头
^ 匹配行首
$ 匹配行尾
. 匹配任何字符
\s 匹配空白字符
+ 匹配一个或多个
\ 转义
`` 跳转到前一视图
Ctrl+O 跳转到早些时候停置光标的位置
Ctrl+I 跳回到后来停置光标的更新的位置
ma 将当前光标下的位置标记为a(从a到z共26个位置可以用)
`a 跳转到标记为a的位置
'a 跳转到位置a所在行的行首
dw 删除下一个词语
d3w 删除下面3个词语
cw 删除下一个词语并进入插入模式
c3w 删除下面3个词语并进入插入模式
cc 删除一整行并进入插入模式
x 代表dl
X 代表dh
D 代表d$
C 代表c$
s 代表cl
S 代表cc
ra 将当前字符替换为a
5ra 将当前5个字符都替换为a
. 重复上一次所做出了改动的命令
v 进入字符Visual模式
V 进入行Visual模式
Ctrl+V 进入列Visual模式
o 在Visual模式下让光标到达被选中的内容的另一头
O 在列Visual模式下让光标到达另一个对角线上的一头
p 把用d或者x命令删除的内容粘贴到光标后面
P 把用d或者x命令删除的内容粘贴到光标前面
3p 放置3份副本
xp 交换光标所在位置的字符和光标所在位置的后一个字符
y 复制文本,随后也可以用p取出
daw 删除光标所在的word
cis 修改光标所在的sentence
R 进入替换模式
~ 改变光标所在字符的大小写,并将光标移动到下一个字符上
:edit foo.txt在vim中开始编辑另一个文件
:edit! foo.txt强制丢弃当前未保存的修改
:next 转到下一个文件,可以缩写为:n
:next! 强制丢弃未保存的修改并转到下一个文件
:wnext 保存当前文件的修改并转到下一个文件
:previous 转到上一个文件
:wprevious 保存当前文件的修改并转到上一个文件
:last 转到最后一个文件
:first 转到第一个文件
:2next 转到下面第二个文件
:bn 转到下一个文件,若到最后一个文件,则转到第一个文件
:bp 转到上一个文件,若到第一个文件,则转到最后一个文件
:args 查看整个列表中有哪些文件
:args a.txt b.txt c.txt重新定义一个文件列表
:args *.txt打开所有txt文件
Ctrl+^ 快速切换到上一个文件
`" 移动光标到上一次离开该文件时光标所在的位置
`. 移动光标到最后一次对文件做出修改的位置
mA 设置当前位置为全局标记A(大写字母)
`A 跳转到全局位置A,即使它不在当前文件内
:set backup生成备份文件
"fy 把选中的内容复制到寄存器f中
"fp 把寄存器f中的内容粘贴出来
"wdaw 把光标所在的word删除并放入寄存器w中
:write >> logfile把当前文件写入(追加)到logfile中
vim -R 只读打开
vim -M 强制禁止修改打开
:edit a.txt打开文件a.txt
:saveas b.txt把当前缓冲区存入b.txt并同时打开b.txt进行编辑
:file c.txt把当前文件的名字改为c.txt
:split 分割一个窗口并在新窗口中打开同样的文件,可以缩写为:sp
:split a.txt分割一个窗口并在新窗口中打开a.txt
Ctrl+w w 跳转到另一个窗口
Ctrl+w Ctrl+w 同上
:close 关闭当前窗口
:only 关闭其他窗口
:new 分割一个新的空窗口
:3split 分割出的窗口高度为3
Ctrl+w + 增加当前窗口的高度
Ctrl+w - 减小当前窗口的高度
3Ctrl+w _ 设置当前窗口的高度为3
Ctrl+w = 平分所有窗口
Ctrl+w _ 最大化当前窗口
:vsplit 垂直分割窗口,可以缩写为:vsp
:vnew 垂直新建分割窗口
Ctrl+w h 到左边的窗口
Ctrl+w j 到下边的窗口
Ctrl+w k 到上边的窗口
Ctrl+w l 到右边的窗口
Ctrl+w t 到顶端的窗口
Ctrl+w b 到底端的窗口
Ctrl+w H 向左移动窗口
Ctrl+w J 向下移动窗口
Ctrl+w K 向上移动窗口
Ctrl+w L 向右移动窗口
:qall 关闭所有窗口
:wall 保存所有窗口的文件
:wqall 保存并关闭所有窗口
:qall! 强制关闭所有窗口
vim -o a.txt b.txt c.txt为每一个文件打开一个水平分割窗口
vim -O a.txt b.txt c.txt为每一个文件打开一个垂直分割窗口
vimdiff a.txt b.txt打开a.txt和b.txt并进行比较(这个是shell中的命令)
:vertical diffsplit a.txt打开分割窗口用于比较当前文件和a.txt
:set scrollbind同步滚动 noscrollbind不同步滚动
qa 将后续命令录制在寄存器a中(从a到z有26个可用)
q 停止录制
@a 执行寄存器a中录制的命令
@@ 执行刚刚执行过的寄存器中的命令
qA 向寄存器a中追加命令
"Ayy 将当前行追加复制到寄存器A中
:[range]s+from+to+[flags] 把range范围内的from替换成to
:[range]s=from=to=[flags] 把range范围内的from替换成to
:[range]s/from/to/[flags] 把range范围内的from替换成to
range为空时,只对当前行有效
range为%时,对所有行都有效
flags为空时,只替换指定行的第一个from
flags有g时,替换指定行的所有from
flags有c时,要求用户对每次替换进行确认
flags有p时,要求:s命令列出所有改变的行
flags有e时,要求:s命令在没有找到任何匹配时也不要报错
:1,5s/from/to/g 把第1行到第5行中所有的from替换成to
:3s/from/to/g 把第3行中所有的from替换成to
:.write a.txt 把当前行写入a.txt
:.,$s/from/to/g 把当前行到文件结束所有的from替换成to
:?^Chapter?,/^Chapter/s/from/to/g 把上一个Chapter到下一个Chapter之间的所有from替换成to
:.+3,$-5s/from/to/g 把当前+3行到倒数第5行的全部from替换成to
:'a,'bs/from/to/g 把从a标记的行到b标记的行(包含a和b行)中全部from替换成to,注意是单引号不是倒引号
:[range]g/{pattern}/{command} 在range范围内找到匹配pattern的行然后执行command命令
这里的command必须是:开头的命令,而不能直接使用normal模式下的命令,除非使用|:normal|
Ctrl+V 进入块选择/块编辑模式
$ 将块选择中的每一行都扩展至行尾
h 停止上面的状态
Ixxx 在被选中的块的前面插入xxx
0Ixxx 在被选中的块的每一行的行首插入xxx
Axxx 在被选中的块的后面追加xxx
$Axxx 在被选中的块的每一行的行尾追加xxx
cxxx 在被选中的块中删除被选中的块并以xxx替代
Cxxx 在被选中的块中删除被选中的块一直到第一行行尾,并以xxx替代
rx 把被选中的块中的所有字符都替换成x
~ 交换大小写
U 小写变大写
u 大写变小写
> 将被选中的块向右移动一个shift单位,空出来的地方填补空格
< 同上,但是是向左移动,但是移动的单位同时受限于左边的边界
J 将下一行附在当前行的末尾,本行的尾空格与下一行的头空格全都只用一个空格代替
gJ 同上,但是不对原文本内容做任何改动
:read a.txt将a.txt读入并放在当前行的下一行
:$r a.txt将a.txt读入并放在当前文件的最后
:0r a.txt将a.txt读入并放在当前文件的最开始
:.,$w tmp将当前行到最后一行写入tmp文件中
:.,$w! tmp将当前行到最后一行写入tmp文件中,即使tmp已存在
:.write >>tmp将当前行追加到tmp文件
gU 将字符变大写
gUl 将当前字符变大写
gUw 将当前字符至该word结束变大写
gU$ 将当前字符至行尾变大写
gUgU 将当前整行变大写,可省略为gUU
gu 将字符变小写
gul 将当前字符变小写
guw 将当前字符至该word结束变小写
gu$ 将当前字符至行尾变小写
gugu 将当前整行变小写,可省略为guu
g~ 改变字符大小写
g~l 改变当前字符大小写
g~w 改变当前字符至该word结束大小写
g~$ 改变当前字符至行尾大小写
g~g~ 改变整行字符大小写,可省略为g~~
:[range]![shell command] 以range范围内的文本作为输入去执行command命令,并将结果覆盖写回range中
或者用光标移动符代替:[range]
:read ![shell command] 运行command并将输出写到当前行的下面
:0r ![shell command] 同上,输出被写入文件开头
:write ![shell command] 运行command并将整个文件写入到command的输入
:.w ![shell command] 同上,只会将当前行输入给command
Ctrl+L 重绘屏幕
:%s/\/4/g 将文件中所有的单词four替换成4
vim *.cpp
qq:%s/\/GetAnswer/ge:wnq9999@q 将所有cpp文件打开并把所有的GetResp单词换成GetAnswer
:%s/[,]∗,.∗/\2 \1/ 将文件中所有的First, Last形式替换成Last First形式
g Ctrl+g 统计字数(要统计某一块具体的字数可以使用visual模式)
K 查找man页
:%s/\s\+$// 删除所有行末空白
vim中的几个文本对象:aw 一个单词; as 一个句子; ap 一个段落
zfap创建一个段落的折行
zc关闭折行
zo打开折行
在Insert模式下:
删除光标前的一个字符
删除光标所在的一个字符
Ctrl+W删除光标前的一个单词
Ctrl+U删除光标前的一个行(按照输入顺序,不一定直接删到行首)
Ctrl+p 补全单词
Ctrl+n 补全单词(向前查找)
Ctrl+x Ctrl+f补全文件名
Ctrl+x Ctrl+l补全整行内容
Ctrl+a补全上一次insert模式下插入的内容
Ctrl+v插入一个由ascii码表示的符号,三位ascii码或者遇到第一个非数字时生效
q: 显示命令历史
试出来的bash快捷键:
Ctrl + A:将光标移动到最左端
Ctrl + B:将光标向左移动一个字符
Ctrl + C:^C(向进程发送SIGINT信号)
Ctrl + D:退出Shell
Ctrl + H:向左删除一个字符
Ctrl + I :显示所有自动补全的候选项
Ctrl + J:(貌似)回车
Ctrl + L:在保留当前命令输入行的情况下清屏
Ctrl + M:(貌似)回车
Ctrl + O:(貌似)回车
Ctrl + P:相当于向上的箭头,显示命令历史
Ctrl + Q:解除锁屏
Ctrl + R:在命令历史中查找
Ctrl + S:锁屏
Ctrl + T:交换最后输入的两个字符的位置
Ctrl + U:清空当前输入的命令行
Ctrl + V:^V(暂时不清楚是什么)
Ctrl + W:向左删除一个单词
Ctrl + XX:将光标在行首行尾来回移动
Ctrl + Y:(貌似)粘贴了某些文本
Ctrl + Z:输入命令时没用,进程在前台运行时将其放到后台并停止
Shift + PageUp:向上滚屏
Shift + PageDown:向下滚屏
转:{
跳转到函数、变量定义处:
[+ctrl+i 跳转到函数、变量和#define
]+ctrl+i
[+ctrl+d 跳转到#define处
ctrl+i 向前跳到前几次光标位置
ctrl+o 向后跳到后几次光标位置
函数体跳转:
总结是:
1,相同就跳到函数的开头:(如果都是左括号或者都是右括号),不同就跳到函数的结尾:
{ 和 } 用来跳到函数的开头。
[] 和 ][ 用来跳到函数的结尾。
2,左右左右,“左”在前面。前后前后,“前”也在前面。因此左括号打头则表示向前,右括号打头则表示向后:
[[ 和 [] 用来向前跳
]] 和 ][ 用来向后跳
[[ 用来跳到光标前面的一个函数开始处。如果光标在函数体内的话,那就是所在函数的开始处。
][ 用来跳到光标后面的一个函数结尾处。如果光标在函数体内的话,那就是所在函数的结尾处。
]] 用来跳到光标后面的一个函数开始处。如果光标在函数体内的话,那就是下一个函数的开始处。
[] 用来跳到光标前面的一个函数结尾处。如果光标在函数体内的话,那就是上一个函数的结尾处。
{}
如何选中括号中的内容 进行:
将光标移至括号内,按shift+v进入行选模式,然后
i{ - 选小括号中内容,不包括小括号
a{ - 选小括号中内容,包括小括号
ib - 选中括号中内容,不包括括号
ab - 选中括号中内容,包括括号
i{ - 选大括号中内容,不包括大括号
a{ - 选大括号中内容,包括大括号
:h text-objects
下面还有些相关的tips,未全部验证:
vi{ 选中{}中间的内容,不包括{}
va{ 选中{}中间内容,包括{}
vi( 选中()中间内容
vi< 选中<>中间内容
vi[ 选中[]中间内容
vit 选中中间的内容
vi” 选中”"中间内容
vi’ 选中”中间的内容
vis 选中一个句子
vib 选中一个block
viw选中一个单词
vip 选中一个段落
}