基础篇"/>
Vim使用基础篇
本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。
先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。
目录
看完以后的汇总
1.正常模式(Normal模式)
1.移动光标
2.删除
3.【:】输入符
4.撤销
5.替换
6.重复命令【. ; ,】
7.复制粘贴
8.缩进
2.插入模式 INSERT
3.可视模式 Visual
4.vim内部的文本对象 textobject
5.vimrc设置
看完以后的汇总
1.输入以下字符会在屏幕最下面出现对应的字符,可以输入命令:
【:】
【 / 】
2.ctrl+操作
ctrl+g 看行数信息
ctrl+o/i 相当于向前导航 向后导航
ctrl+r 相当于重做(撤销刚刚撤销的)
ctrl+w ctrl+w 切换vim窗口(这里在当用:help 的会用到)
ctrl+v进入面向块的可视模式
number+ctrl+a/数字+ctrl+x 分别对数字进行加number和减number的操作(如果当前光标不在数字上,就是在当前行正向查找到的那个数字再进行加和减的操作,如果找不到不做任何修改)
3.善用help
- 比如输入 【:help w】 ,显示如下图
S代表Shift键,Right代表→键,即按shift→和按小写w是一个作用——向前移动一个单词的意思。
但是exclusive,motion 啥意思?words 和 WORDS啥区别?继续help。
- 输入【:help motion】,如下图
motion指移动光标的那些命令。
motion常常用在operator后面,用来表示operator要操作的字符。后面复杂的用到再看了。
- 输入【:help exclusive】
出现了两种motion:a character motion 和 linewise motions 应该是面向字符的移动和面向行的移动。
- 输入【:help word】
w:单词 = 包含字母数字下划线的序列 或者 除了前面这些以外的其他非空白字符组成的序列
比如 <go!to!school!>
<,go,!,to,!,school > 分别都是word
W:字串 = 非空白字符序列
比如 <go!to!school!>
<go!to!school!> 就是一个WORD
4.记住 operator + motion 的语法
operator有哪些 ——:h operator 查看
1.正常模式(Normal模式)
任何模式下按ESC就可以进入正常模式,没事就多按几次ESC好了
press <ESC> to make sure that you are in Normal mode
分成几类
1.移动光标
1)基本移动
【motion】:h j k l 左下上右 w 一个词儿 b e 这个的词头儿和词尾儿
更多指令:【数字 + motion】
1) 相当于上下左右箭头的移动 | h j k l 左下上右 |
2) 以word子串为单位 w b e ge
PS: 1)以WORD字串为单位 W B E GE 2)word和WORD区别输入【:help word】查看。 3)其实是以WORD为单位移动比较常用 4)也不用记多清楚,这几个字母试就行了 | w 正向移动到下一个单词的词头 b 反向移动到当前单词或上一个单词的词头 |
e 正向移动到当前单词或下一个单词的词尾 常用组合:【ea】——在词尾进入插入模式
ge 反向移动到上一个单词的词尾 常用组合:【gea】——在上一个单词的词尾进入 | |
3) 一行的首尾 | 0移动到行首 ^移动到行首,不包括空白字符 |
$ 移动到行尾 | |
4) 跳转到指定行
| gg 跳到文件第一行开头 |
G 跳到文件最后一行 | |
跳到指定行方式: 数字+G 数字+gg :数字
先通过【ctrl+g】 显示行数等信息 | |
5) 移动屏幕位置 | zz,让当前行居屏幕中间显示; zt,让当前行居屏幕顶部显示; zb,让当前行居屏幕低部显示; |
2)导航移动,匹配移动
1) 向前导航,向后导航 【 在查找的时候的前一个后一个位置 以及在跳转行数的前一个后一个 不包括 hjkl的移动位置 】 | 【ctrl+o】回到较旧的位置 【ctrl+i】去到较新的位置 |
2) 【%】匹配括号查找 查找对应的另一边的括号 | 把光标放到( [ { 或者 } ] ),然后按%,就跳转到匹配的括号。 |
3) 搜索移动
1) 正常模式下,输入/或者?,在屏幕下方输入单词进行查找 | / or ? 。一个正向一个逆向 或者 光标停在要给单词上,按【*】,就相当于输入了/单词 |
n or N , 下一个或者前一个 | |
一些附加的设置 | 【:set hls】设置高亮的查找 highlightsearch 【:set nohls】 设置非高亮 【:set ic】设置忽略大小写 ignore case 【:set noic】设置不忽略大小写 【:set is】设置逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成 includesearch 【:set nois】设置完整搜索模式 【/words/c】 仅一次中忽略大小写 |
2) f,F,t,T在当前行查找字符,如果没有找到,就什么也不做。 如果要多次查找同个字符,结合【,;】重复命令 | f{char}:在当前行正向查找指定字符 F{char}:反向查找 t{char}: 正向移动到下一个char所在之处的前一个字符上。 T{char}:反向移动到上一个char所在之处的后一个字符上。 |
2.删除
【operator】:d删除
更多指令:【operator + 数字+ motion】
【x】
| 光标处删除一个字符 |
【d】 注意:光标处的字符也删除 dl 相当于 x | dw 从光标开始删除到下一个单词开头(w是 exclusive) |
de 从光标开始删除到这一个单词词尾(e是inclusive) | |
d$ 从光标开始删除到这一行结尾 | |
dd 删除整行 输入命令【p】把删除的那行粘贴在光标所在的行,在光标所在行的的下面插入此行 | |
db 从光标前面开始删除到词头(:不包括光标所在的字符 |
ps:删除操作符d的更多组合
1)d与查找字符(t,T,f,F)的结合,比如
dfd ==》从当前光标处,删除到 字符d前的字符。
dt. ==》从当前光标处,删除到直到字符. 前的字符。
f,dt. ==》找到,光标从,开始,删除直到.前的字符。
2)d与文本对象的结合:daw dap (文本对象下面会介绍)
可以用来构造可重复的修改:比如删除用daw(delete a word:operator+motion(motion可以用文本对象)),就可以用.来重复上一个操作,即删除单词。
3) dl 和 cl 的区别(operator c 和 operator d)
dl = x 删除当前字符
cl 删除当前字符并进入插入模式
3.【:】输入符
在正常模式下,输入:会在屏幕下面显示:
就可以在最下方输入一些命令了
使用上下箭头前一个命令后一个命令
按ESC退出
按TAB键补全命令
3.1 文件相关 | :w保存 :q退出 【:wq】保存退出 【:q!】不保存退出 【:w FileName】保存到文件但不退出 |
:r 读取取回 可以是文件内容也可以是外部命令的输出 【:r FileName】读入文件的内容到光标下 【:r !ls】读取外部命令的输出 的内容 插入到光标下 | |
:e 编辑 :help 帮助-跳到对应的主题上 | |
3.2 【:s】替换命令 | 【:s/old/new】 替换光标所在那一行的第一个匹配的 |
【:s/old/new/g】 替换光标所在那一行的所有匹配 | |
【:#,#s/old/new/g】 替换两行之间的所有匹配。如560,590s/thee/the/g | |
【:%s/old/new/g】 替换整个文件的所有匹配 | |
【:%s/old/new/gc】 询问是否替换,整个文件 | |
3.3 【:!】外部命令 | 【:!ls】 【:!pwd】 【:!rm】 等等
|
4.撤销
u 撤销单次。试下多次按 或者 【数字+u】 | |
U 撤销整行的修改。 | |
ctrl+r 撤销刚刚的撤销操作,如果刚刚没有撤销命令,那么这个指令就没有用。 |
注意:
1)当进入一次插入模式,再退出插入模式,这整个被视为一个撤销单元块,被视为一次修改。
2)为了把撤销单元切得更小块,可以用<esc>o(相当于退出插入再进入插入) 来代替 回车键。这样就是每行是一个撤销单元。
3)当在插入模式,使用上下左右的光标键 其实就是产生了一个撤销块,即相当于退出了后又进入插入模式。
5.替换
r & R替换命令 | r 单次替换,自动退出为正常模式 |
R 一直替换,会进入替换模式(可以看到屏幕最下方出现了--REPLACE--) 相当于我们键盘上的Insert按键 按esc退出为正常模式。 |
6.重复命令【. ; ,】
1)【. 】 重复上一次的修改 | 比如上一次的操作是比较复杂的daw,删除一个单词。还想继续删除一个单词的操作,就按.就行了。 比如上一次的修改是 x,dd, 按.就是删除当前字符、删除当前行。 比如上一次的修改是在插入模式中的修改——每行末尾加分号【A;ESC】,继续下一行【j.】
|
2)和查找字符命令(fFtT)结合的 【;】 重复查找上次所查找的字符 【,】 反向查找
ps:查找words命令(/),用n和N进行上一个查找 | 【;】和【.】合作例子:先找到一个字符(f 移动光标),进行插入修改操作退出(进入插入模式到退出被视为一次修改) ,然后重复上述过程就直接用【;.】即可——让移动动作 和 修改动作 都可以重复。
如果用【/】搜索单词的操作的话,用【n/N】来重复移动动作。 |
【.范式】:
1.
用一次按键移动,一次按键执行
比如上述例子中的【j.】【;.】【n.】
2.
尽量构造可以重复的操作
删除一个单词用 daw 而不是其他db dw de之类的
能用.来重复的时候,就不需要数次数了 比如【dw.】= 【d2w】
7.复制粘贴
复制y | yw,复制一个单词 yy,拷贝当前行;相当于 Y nyy,拷贝当前后开始的n行 y^,复制到行首,不包括当前位置; y$,复制到行尾,包括当前位置; yG,复制到文档尾;ygg,复制到文档头; 【yyp】复制粘贴 |
p:在光标后进行粘贴 (P:在当前光标前粘贴) | dd删除后,可以用p进行粘贴——ddp即实现了当前行与下一行的交换; x删除后,也可以用p进行粘贴——xp即实现了当前字符与其后的一个字符的交换; d相关的命令删除后都可以用p进行粘贴 |
8.缩进
缩进类命令 | 1)单行缩进 << >>
2)多行缩进 n<< n>> 当前行开始的n行进行缩进
2)从当前行缩进到末尾 >G |
2.插入模式 INSERT
1.【iao直接进入插入模式】 | i 在光标的前面进入插入模式 |
I 到行首进入插入模式 | |
a 在光标的后面进入插入模式 | |
A 到行尾进入插入模式 相当于【$a】,能用1个的就不要用2个了。 | |
o 在光标的下方打开新的一行并进入插入模式 相当于【A+回车】 | |
O在光标的上方打开新的一行并进入插入模式 相当于【ko】 | |
2.【c删除文本(text)以后再进入插入模式】 更多指令:【c + 数字+ motion】 ps:operator c 和 operator d都是删除,区别是进不进入INSERT模式 | ce 删除光标到词尾 并且进入插入模式。试下 c2e |
cw 删除光标到下一个单词的开头 并且进入插入模式。试下c3w | |
c$ 删除光标到行尾 并且进入插入模式。试下c4$ | |
2.【s删除字符(character)以后再进入插入模式】 s = cl | |
3.可视模式 Visual
在正常模式下按【v】,屏幕最下方会显示 --Visual字样 | |
按v进入面向字符的可视模式 | 先:使用移动操作的一些motion(h j k l w b e 啊这些),就会看见高亮选中一段字符 |
再:可以进行相当于在正常模式下的命令操作 比如 【d】就是删除了选中的字符 比如 【:w FileName】 就是存到FileName中 比如 【y】就是复制了选中的字符,然后再【p】就是复制了 比如 【r-】就把选中的所有字符全部替换成了-
按完操作以后就自动退出到正常模式了。 | |
按V进入面向行的可视模式 | VG:选中光标所在行到最后一行 |
按ctrl-v进入面向块的可视模式 |
4.vim内部的文本对象 textobject
1.用于操作分隔符的文本对象
分隔符有:
<>(xml的tag) <>
() [] {} <>
"" '' ``
分隔符就是相当于配对的符号,用他们来作为开始和结束的标志
用于操作分隔符的文本对象 |
|
it | 一对XML标签的内部<xml>tags</xml> |
at | 一对XML标签 |
i代表inside,里面 a代表around,围着的 | |
同理 a) i),a] i],a} i},a> i> | |
同理a'' i'',a' i', a` i` |
2.用于操作文本块的文本对象
d{motion}命令 和 aw as ap配合起来使用比较好, c{motion}命令 和 iw 以类似的文本对象配合使用较好。 | |
aw | 当前单词以及后面的空格,如果有有的话 |
iw | 仅仅删除当前单词,不后面的包括空格 |
is as | 句子 |
ip ap | 段落 |
3.用文本对象执行命令:d,c,y operator
{motion} 中的都可以用 文本对象 来代替
c + {motion}删除再进入插入模式 | ci''#<esc>——修改双引号里面的内容为# citclick here<esc>——修改标签里面的内容为click here |
d + {motion}删除 | daw 删除一个单词 |
y + {motion}复制 | yit拷贝标签内的文件 |
5.vimrc设置
vimrc 在哪里
输入 :version 最后面几行会出现
如不知道 $VIM 代表什么
输入:echo $VIM
更多推荐
Vim使用基础篇
发布评论