Created
September 23, 2013 10:49
-
-
Save luxixing/6668947 to your computer and use it in GitHub Desktop.
vim操作命令总结--此版本仍然需要改进,里面很多概念还是理解的不够透彻,看图参考领悟
认真研究此图片,大有用处 http://coolshell.cn//wp-content/uploads/2011/09/vim_cheat_sheet_for_programmers_print.png
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
几个概念的厘清: | |
广义单词和狭义单词:狭义单词可以理解为仅仅由数字字母组成的一组字符序列,空格和(),{}等标点符合,回车换行tab等特殊字符都可以分割狭义单词,vim中w按键指的就是狭义单词 | |
广义单词则是两个相邻空格之间的字符序列,vim中按键W就是指广义单词 | |
系统选择缓冲区:所谓系统选择缓冲区是指在*inux系统下,当鼠标选择一部分内容,这部分内容就会被存储在一个位置,该位置就是系统选择缓冲区,vim中 "*调用系统选择缓冲区 | |
使用:reg察看vim中的所有缓冲区,缓冲区的名称是"*或者"+(剪切板缓冲区)或者""(最近操作缓冲区)或者"[0-9a-z] | |
剪切板缓冲区:等同于windows的剪切板,复制,删除,剪切的内容在这个缓冲区存放,vim "+调用该缓存区 | |
如果使用:reg没有 "+和"*缓存区,需要安装vim图形界面,ubuntu下 apt-get install vim-gnome,其他系统请google vim图形界面安装 | |
~ :normal模式下,切换选中单词大小写(toggle case),; | |
常用操作 | |
~ 光标所在位置字符大小写转换 | |
g~w光标位置处狭义单词大小写转换 | |
g~W光标位置处广义单词大小写转换 | |
g~$从光标所在位置开始到行尾,大小写转换 | |
g~^从光标所在位置开始到行首,大小写转换 | |
补充说明 | |
U和u也可以进行大小写转换,但是因为u具有undo(重做的功能),还是避免使用u进行大小写转换 | |
` :normal模式下,精确查找标记位置,定向到标记创建时光标所在的位置而不是行首,假设我们使用ma创建的一个标记,可以使用`a定位 | |
常用操作 | |
``快速定位到最近记录的标记 | |
补充说明 | |
'也可以对标记进行定位,但是只定位到标记的行首,不是精确定位 | |
! :comand命令行模式下,执行外部程序,比如:! pwd,查看当前工作目录 | |
@ :normal普通模式下,执行寄存器里的操作,比如使用qa记录的操作@a即可重新执行一遍,@@执行最近寄存器中记录的操作 | |
# :normal普通模式下,执行完/pattern之后,使用#,从当前光标位置向上定位到匹配字符的位置,##对当前光标所在位置的单词进行查找,循环查找 | |
$ :normal模式下,定位到行尾 | |
% :normal模式下,匹配光标所在位置(){}[]<>的对应的另一半 | |
^ :normal模式下,匹配一行的第一个不为空blank的字符 | |
& :noremal 含义没有验证 repeat:s,稍后补充 | |
* :noraml模式下,执行完pattern之后,使用*,从当前位置向下定位到匹配字符的位置,**对当前光标所在位置的单词进行查找,循环查找 | |
( :normal模式下,定位到句子的开始位置,在有汉字的情况下好像和期望不符,待验证补充 | |
) :normal模式下,定位到句子的结束位置,汉字情况下,和期望不符,待验证补充 | |
0 :normal下,定位到一行的第一列,而不是一行的第一个不为空的字符 | |
- :normal模式下,定位到上一行的行首,这个是减号 | |
_ :normal模式下,定位到本行的行首,这个是shift+-的那个字符,下划线 | |
+ :normal模式下,定位到下一行的行首 | |
= :normal&visual模式下,对选中代码自动格式化,比如gg=G,对全文进行格式化 | |
Q :normal,切换到EX模式,vim的ex模式具体是干吗的,想深入了解,可以google,因为我发现这个模式好像是比较古老而不常用的,所以不再深入了解 | |
q :normal模式,这是相当出彩的按键,使用q[a-z0-9]记录接下来的操作,然后使用@[a-z0-9]回放刚才的操作,结束记录,重新按一下q即可.不支持A-Z的标记 | |
w\W :normal模式,单词的选择,两者区别见文档头部广义单词和狭义单词部分,从光标所在位置计算,到下一个单词的开始 | |
常用操作 | |
dw删除光标所在位置的单词 | |
3dw删除从光标所在单词往后3个单词 | |
补充说明 | |
db删除光标所在位置单词(向前) | |
3db删除从光标所在单词往前3个单词 | |
de删除光标位置所在单词 | |
3de删除光标所在位置往后3个单词到单词结尾 | |
e\E :normal模式,作用基本类同w\W,具体区别是:e\E从光标位置所在单词开始,到本单词结尾,而不是像w\W到下一个单词的开始 | |
r :normal模式,替换光标位置的字符 | |
常用操作 | |
3rd 从光标位置开始,共计三个字符被替换为d | |
R :normal模式,从光标位置开始,替换之后所有的内容 | |
常用操作 | |
4hR 从光标位置开始向左移动4个字符,进入替换模式,随后输入的内容替换掉原有内容 | |
t :normal模式,从光标位置开始,向后查找字符,直到遇到字符停止,光标位置移动到此字符前一位置,查找范围是当前行,比如ta,查找光标位置之后的字符a,找到之后光标定位在a字符前 | |
T :normal模式,同T,反向查找 | |
f :normal模式,从光标位置开始,向后查找字符,找到字符后光标移动到字符位置,查找范围是当前行,比如fa,查找光标位置之后的字符a,找到之后移动光标位置在a字符上 | |
F :normal模式,同f,反向查找 | |
y\Y :normal&visual模式 复制,Y是复制一整行 | |
常用操作 | |
4yl从当前位置开始,向后复制4个字符 | |
4yh从当前位置开始,向前复制4个字符 | |
4yk从当前位置开始,向上复制4行 | |
u\U :normal模式 undo,大U表示undo line,具体细节没有体会两者区别 | |
i\I :normal模式,切换普通模式到插入模式,I在行首插入,i在光标当前位置之前插入 | |
o\O :normal模式,在当前行之下插入o,在当前行之上插入大O | |
a\A :normal模式,在当前光标位置后之后插入a,在当前行的行尾插入 | |
p\P :normal模式,p在当前行之下粘贴,P在当前行之上粘e | |
补充说明 | |
"" 最近一次操作的寄存器存储的内容 | |
"* 系统选择缓存区的内容,所谓选择缓存区是指鼠标选定一部分内容,这部分被选定的内容就被放如了选择缓存区,"*p 即可粘贴系统选择缓冲区内容 | |
{\} :normal模式下,{上一个段落,} 下一个段落,中文情况下不符合期望 | |
s\S :normal模式下,s删除坐标位置字符,切换到插入模式,S删除当前行,进入插入模式D | |
d\D :normal&visual D从当前行的行尾删除到坐标所在位置,dd删除当前行,d和方向键,数字键组合可以实现灵活的删除 | |
常用操作 | |
3dd 向下删除3行 | |
3dw 向后删除3个单词 | |
G :normal模式 跳转到文件底部,文件eof位置 | |
g :normal模式 这个在很多组合操作中都使用到,gg是到文件首行 @todo 更多操作继续研究学习 | |
H :normal模式 光标跳转到屏幕顶部首列 | |
h :normal模式 光标向右移动 | |
j :normal模式 光标向下移动 | |
k :normal模式 光标向上移动 | |
l :normal模式 光标向右移动 | |
J :normal模式,当前行和狭义行合并 | |
常用操作 | |
3J 当前行和下3行合并 | |
L :normal模式,光标定位到屏幕底部的首列 | |
: :normal :cmd进入命令行模式 | |
; :normal模式,next f/F/t/T这个没弄明白,待补充 | |
" :normal模式,寄存器调用,"后面可跟的字符有+ * .字母数字,+剪切板缓存区,*选择缓冲区,.最近缓存区 | |
常用操作 | |
"+x剪切内容到系统剪贴板 | |
"+gp粘贴系统剪切半内容 | |
| :normal模式 \d+| 跳转到数字制定的列 | |
x\X :normal模式 x删除字符,方向向后,X删除字符,方向向前 | |
常用操作 | |
3x 向后删除3个字符 | |
10X向前删除10个字符 | |
c\C :normal模式 c改变当前字符内容,进入插入模式,cc改变当前行内容进入插入模式,C=cc | |
v\V :normal模式,转换为visual模式,小v选择字符,V 选择行,ctrl+v选择块,在windows系统下使用ctrl+q替代ctrl+v进行块选择 | |
n\N :normal模式,查找结果的适合,n向下查找,N向上查找 | |
m :normal模式下标记设定 ma设定标记a,使用`a精确定位标记a,使用'a定位标记a所在行行首 | |
< :normal模式下向左缩进 | |
常用操作 | |
3<< 对包括当前位置所在行在内向下向左缩紧 | |
> :normal模式下向右缩进 | |
3>> 对包括当前位置所在行在内向下向右缩进 | |
. :normal模式下,重复上一次操作,3.重复三次 | |
? :normal模式下全文件查找 ?pattern 查找pattern模式的字符,向上查找 | |
/ :normal模式下全文查找 /pattern,向下查找 | |
vim没有使用到的一些按键 | |
ctlr+` | |
ctrl+1 | |
ctrl+@ ctrl+2做什么了 | |
ctrl+3 | |
ctrl+4 | |
ctrl+5 | |
ctrl+^ ctrl+6做什么了 | |
ctrl+7 | |
ctrl+8 | |
ctrl+9 | |
ctrl+0 | |
ctrl+_ | |
ctrl+= | |
ctrl+i | |
ctrl+H ctrl+h是什么用 | |
ctrl+J ctrl+j是什么用 | |
ctrl+; | |
ctrl+' | |
ctrl+| | |
ctrl+\ | |
ctrl+M ctrl+m是什么用 | |
ctrl+. | |
ctrl+/ | |
vim中必须使用寄存器名称的按键 | |
q记录接下来的操作,一个完整的记录操作是,首先按下q(0-9a-zA-Z),进行一系列操作,被记录,q退出记录状态, | |
@回显重做q记录下的record,@(0-9a-zA-Z)回显具体的某个寄存器里的内容 | |
vim中normal按键d,c,y的说明 | |
执行这单个键的操作时,都是针对光标位置到目标位置中间的内容 | |
比如dd,就是删除当前行内容;dw删除从当前光标位置到下一个单词前的内容;daw算是智能删除把,删除当前光标位置所在单词;d3w,删除从光标位置到第三个单词前的内容 | |
dne删除到单词尾;dnl向右删除n个字符;dnh,向左删除n个字符;dnj 向下删除n行,包括当前行在内一共删除了n+1行;dnk向上删除n行 | |
cnw删除从光标位置到第三个字符间内容,进入插入模式,即change光标位置到目标位置间内容;caw智能删除光标处单词 | |
vim中进入insert模式的命令 | |
a A i I o O s S c C | |
vim中normal模式下命令 | |
r Y u U p P D J K :cmd x X v V m . | |
vim中移动命令 | |
# $ % ^ * ( ) - _ + w W e E t T { } [ ] f F G h H j k L l ; 'mark | b B n N M , ? / | |
vim中查找命令 | |
f F t T n N , ? / | |
vim中ctags使用的命令 | |
# % * t } | |
vim 代码格式化 | |
= < > | |
vim 中必须加参数的命令 | |
q z Z " g ? / [ ] f F t T m | |
vim一些特殊操作 | |
:r!ls -al 执行ls命令,并且将结果插入光标所在行的下一行 | |
ctrl+u normal模式下,向上换屏1/2,ctrl+d向下, | |
zz 当前行放到窗口的中间位置 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment