vim命令速记 & bash快捷键

转载自 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 选中一个段落

}

你可能感兴趣的:(vim命令速记 & bash快捷键)