开始之前:本来打算传张图片上来的,结果串不上来 ,我说我其实是会画图的,你们信么。
vim 是一款强大的屏幕文本编辑器,即一次读取所有的文本内容,并显示在屏幕上;与之对应的是行编辑器,每次仅读取一行内容比如说ed。
vim的选项:
虽然标题是快捷键,但是我还是把选项也写上吧。
vim file :没有选项的选项,直接使用vim打开文件
扩展: vim file1 file2 file3 :使用vim 同时打开多个文件 ,但是只能显示一个,但是可以通过命令进行文件之间的切换。
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
:wall 保存所有
:qall 退出所有
:wqall 保存退出所有
.
行跳转选项:
即在打开vim时决定光标停留的行,行跳转可以使用 数字或模式实现
+# : 打开文件时光标跳转到 # 行的行首
vim +14 /etc/passwd
+/patter :打开文件时光标停留在第一次匹配到该字符串的地方.
vim +/root /etc/passwd
.
vim -m file : 以只读的方式打开文件
.
vim -b file :以二进制的方式打开文件
.
vim -d file1 file2 : 以分屏的方式 打开两个文件.高亮显示差别.
.
vim -o/-O file1 file2 : 代开多个文件 ,但将窗口分割为多个小窗口
-o 水平分割
-O 垂直分割
.
vim -e file :打开文件时进入扩展的命令模式
等价命令ex
vim快捷键
个人理解: vim 进入后的界面不同于windows的记事本可以直接编辑,vim编辑器进入之后只能使用命令。包括ed编辑器,也不是直接编辑的。
而且编辑模式命令与扩展命令模式命令,其实都是命令的一种,只是有的命令动作比较长,在动作中可能需要用户的输入。也就是inster状态。有的命令带有扩展选项,:。
插入操作
i:在当前的光标位置之前插入字符,esc键结束插入,
# i,esc :为1个完整的动作,重复执行动作#次,当#不指定时,默认为1 次。
a:光标向后移动一个字符,然后在当前光标前插入。即在当前光标位置之后插入字符。esc键结束插入。
# a,esc :为1个完整的动作,重复执行动作#次,当#不指定时,默认为1 次。
l:在当前行的行首插入字符 ,esc键结束插入,
#I,esc :为一套完整的动作,重复执行动作# 次,当# 不指定时,
A:在当前行的行尾插入一个字符,esc键结束插入
#A,esc :为一套完整的动作,重复执行动作# 次,当# 不指定时,默认为1次 。
o:在当前行的下方插入新的空白行,
#o:无需esc 键结束,重复执行o动作 #次,当#不指定时,默认为1
O:在当前行的上方插入新的空白行。
#O:无需esc 键结束,重复执行O动作# 次,当# 不指定时,默认为1 。
c:修改模式,可实现范围修改,即清空指定范围,然后进入插入模式。
窗口操作
ZZ :保存退出
ZQ :退出不保存
单文件窗口分割:
ctrl+w, s :水平分割
ctrl+w, v :垂直分割
ctrl+w ,q:取消相邻窗口
ctrl+w ,o:取消全部窗口
: wqall : 退出
跳转操作
字间跳转
. | . | . |
---|---|---|
. | 上k | . |
左h | . | 右l |
. | 下 j | . |
词间跳转:
. | . |
---|---|
当前或上一个词首 b | 下一个词首 w |
. | 当前或下一个词尾 e |
当前页跳转:
. | . | . |
---|---|---|
页首:H | 页中:M | 页底: L |
行内跳转:
. | . |
---|---|
^ :非空白字符的行首 | . |
0:真正的行首 | 行尾 :$ |
段落跳转:
. | . |
---|---|
)跳至下一句 .为分割 | (跳至上一句 .为分割 |
} 跳至下一句 空行为分割 | { 跳至上一句 空行为分割 |
翻页操作:
. | . |
---|---|
ctrl + b 向上全屏 | ctrl + u 向上半屏 |
ctrl + f 向下全屏 | ctrl + d 向下半屏 |
G 行号跳转
. |
---|
gg 跳至首行 |
G 跳到行号为#的行 |
gg 跳到行号为#的行 |
G 跳到尾行 |
字符编辑
x :剪切光标处的字符,光标位置不改变,剪切位置后的字符向前补齐
\#x 重复执行x ,#次
~ :装换字符的大小写,转换后光标位置向后移动一位。
\#~ 重复执行~ , #次
r/R :替换/连续替换光标处的字符。连续替换时每替换完成一个单词,光标向后移动1位。
\#r 重复执行r ,#次,r动作类似于宏。r替换开始,至输入字符,替换完成,为一个r动作。所以#r会替换#个相同的字符。
d :删除操作,可结合光标跳转字符功能,实现范围删除。
格式:<start>d<end>:从指定的开始位置为开始,至指定的位置为结束,对期间的内容[start-end]执行d操作即删除。其中start的内容可以默认,即使用光标位置。
1ggdG :删除全部内容
d50gg :删除当前光标位置至50行的所有内容
0d$ :删除整行内容
y :复制操作,可结合光标字符跳转功能,实现范围删除。
p :粘贴操作,
p:如果粘贴的为整行则在当前行的下面粘贴,如果是字符则在光标后粘贴。
P:如果粘贴的为整行则在当前行的上面粘贴,如果是字符则在光标前粘贴。
J :删除当前行后的换行符
可视化操作:
. |
---|
v:面向字符 |
V:面向行 |
c+v:面向块 |
撤销
. |
---|
u :撤销最近一次更改 |
#u :撤销之前#次更改 |
U :撤销光标移动至该行后的所有更改 |
ctrl + r 恢复最近1次撤销 |
重复操作
. |
---|
. 重复之前的操作 |
. 重复之前的操作#次 |
扩展命令模式
使用:进入命令扩展模式,使用对应命令进行操作。
个人理解:vim中并无模式,插入模式,命令扩展模式,都不过是执行的命令过程中的一部分,只是有些命令动作较多。扩展命令模式是一条带有参数的命令。
:q 退出
:w 保存
:x 保存退出
:r 读取文件的内容或命令的输出,类似于重定向
:! 在命令之后表示强制执行该命令 ,在外部(对于vim)命令之前表示执行该命令
:!ls
:r!ls
查找:
:/PATTERN : 从当前光标所在处向文件尾部查找
:?PATTERN : 从当前光标所在处向文件首部查找
n: 与命令同方向
N:与命令反方向
地址定界:
格式 :start_pos,end_pos
数字表示法:
# : 单一行号,只表示该行号的行
# ,# :使用数字表示具体的行号。表示一段范围。
# ,+#:从左侧#表示的行号为开始,+#表示增量,即#+#行。
模式匹配法:
/pat1/,/pat2/ :从第一次被pat1匹配到的行开始,一直到第一次被pat2匹配到的行结束,
特殊表示:
. 表示当前的行
表示最后一行 -1 表示最后一行的上一行
% 表示全文
使用方法:
地址定界中的表示方法可以混合使用。在地址定界后跟随一个动作,如d(删除),y(复制),w file(将定界内容保存到文件),r file(在指定的位置插入指定文件中的内容)
替换:
:s 格式:地址定界 s/要查找的内容/替换为的内容/修饰符
可以不指定地址定界,在不指定地址定界时,默认为光标所在的行。
要查找的内容:可使用模式,但是基本的正则表达式。
替换为的内容:不能使用模式,但是可以使用\1,\2…等后项引用,还可以使用&引用前面查找时找到的整个内容
s前面可以指定范围 %全文
修饰符
i: 忽略大小写
g: 全局替换,默认情况下,每一行只替换第一次出现
gc: 全局替换,每次替换前询问
查找替换中的分隔符/可替换为其他字符
s@/etc@/var@g
s#/boot#/#!
& :表示之前搜索到的文本
%s/root/&er/g
改变大小写
gu :变为小写
gU :变为大写
vim属性更改:
更改的属性仅对当前使用的vim有效,如果长期有效许定义在配置文件中
:set nu 增加行号 set nonu 取消行号
:set sm 括号成对高亮
:set ai 自动缩进
:syntex on /off 语法高亮
:set ic 忽略字符的大小写。
:set fileformat=dos 启用windows格式:
:set fileformat=unix 启用unix格式: