vim命令速记 & bash快捷键

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快捷键)