Skip to content

Instantly share code, notes, and snippets.

@luxixing
Created September 23, 2013 10:49
Show Gist options
  • Save luxixing/6668947 to your computer and use it in GitHub Desktop.
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
几个概念的厘清:
广义单词和狭义单词:狭义单词可以理解为仅仅由数字字母组成的一组字符序列,空格和(),{}等标点符合,回车换行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