文章目录
vim的模式的基本概念
基本上vim可以分为三种模式:
命令模式(command mode)
插入模式(insert mode)
末行模式(last line mode)
-
命令模式
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式或末行模式 -
插入模式
只有在插入模式下,才可以做文字输入,按ESC键可回到命令模式 -
末行模式
纯文本保存或退出vim,也可以设置编辑环境,如寻找字符串、列出文件行号等;不过一般我们在使用vim简化成两个模式,就是将末行模式也算是命令模式
vim的基本操作
vim如何打开文件?
# vim [options] [file ..]
选项:
+#:打开文件后,直接让光标处于第#行的行首
+/PATTERN:+/是固定格式的;打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
+:表示打开文件光标直接处于末端的行首
模式转换
编辑模式:(普通模式)
普通模式 --> 插入模式
i:在光标所在处输入
o:在光标所在处下方打开一个新行输入
a:在光标所在处上方打开一个新行输入
I(大写i):在光标所在行的行首输入
A:在光标所在行的行尾输入
O:在光标所在行的上方打开一个新行输入
插入模式 --> 普通模式
ESC键
普通模式 --> 末行模式
:
末行模式 --> 普通模式
ESC键
关闭文件
ZZ:在普通模式下连续按ZZ,保存并退出
末行模式下:
:q 退出,在没有对文件做任何修改的情况下可以退出,如果做了修改不想保存就用强制退出
:q! 强制退出,不保存此前的编辑操作
:wq 保存并退出
:x 保存并退出
:w /PATH/TO/SOMEFILE 将修改过的文件保存至另一个新的文件(相当于另存为)
光标跳转
以下操作仅普通模式下:
字符键跳转:
h:向左
j:向下
k:向上
l:向右
#command:跳转由#指定的个数字符
单词间跳转:
w:下一个单词的词首
e:当前或后一个单词的词尾
b:当前或前一个单词的词首
#command:跳转由#指定的个数的单词
行首行尾跳转:
^:跳转至行首的第一个非空白字符
0:数字0,跳转至行首(空白字符的行首可以,但是tab键的空白不可以)
行间跳转:
#G:跳转至由#指定的行
1G或gg:跳转至第一行
G:跳转至最后一行
翻屏操作
ctrl+f:向文件尾部翻一屏
ctrl+b:向文件首部翻一屏
ctrl+d:向文件尾部翻半屏
ctrl+u:向文件首部翻半屏
Enter:按行向后翻
vim的普通模式的一般操作
x:删除光标所在处的字符
#x:删除光标所在处起始的#个字符,例如20x表示删除光标所在处位置的“后面”20个字符
X:大写X,每按一次,删除光标所在位置的“前面字符”
#X:删除光标所在位置的#个“前面字符”
xp:交换光标所在处字符与其后面的字符的位置
替换命令:
r:替换光标所在处的字符,按r后,需要后面要跟上一个要替换成的字符
R:替换光标所到之处的字符,直到按下ESC键为止
删除命令:
d:删除命令,可结合光标跳转字符,实现范围删除;
dw:删除光标所在位置到下一个单词词首所有字符
d^:删除光标所在处至行首的字符
d$:删除光标所在处至行尾的字符
dd:删除光标所在处的一整行
#dd:删除光标所在处的行起始的共#行(包含光标所在行)
粘贴命令:
P:大写P;缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方,否则,则粘贴至当前光标所在处的前方
p:小写p;缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方,否则,则粘贴至当前光标所在处的后方
复制命令:
y:表示复制,工作行为类似于d命令
yy:复制光标所在处的一整行
#yy:复制光标所在处向文件尾部的共#行(包含光标所在行)
yw:复制光标当前位置到下个单词词首的内容
ye:
yb
#yb
...
改变命令:
普通模式 --> 插入模式;实现删除操作后并成为插入模式
c$:表示从当前光标所在位置向后删除所有字符并改变为插入模式
c^:从当前光标所在位置向前删除所有字符并改变为插入模式(不包括光标所在字符)
c0:和c^一样的功能
cb
ce
cw
#command
cc:删除光标所在行,并转换为插入模式
#cc:删除光标所在行向文件尾部的#行(包含光标所在行)
其他操作
可视化模式
v:按字符选定
V:按行选定
结合命令模式:d,c,y,p
撤销操作
u:撤销此前的操作
#u:撤销此前的#个操作
ctrl+r:撤销此前的撤销
重复执行前一个编辑操作
. 点号表示重复执行前一个的操作
vim末行模式
内建的命令行接口
(1)地址定界
:start_pos[,end_pos]
#:特定的第#行,例如5即第5行
.:点号表示当前行
$:表示最后一行
#,#:指定行范围;左侧为起始行,右侧为结束行
#,+#:指定行范围,左侧为起始行的绝对编号,右侧为相对左侧的行号的偏移量;例如:3,+7
1,$:表示从第一行到最后一行
%:表示全文
/pattern/:从光标所在处起始文件尾部第一次被模式所匹配到的行
/pattern/,$:从第一次被pattern模式所匹配到的行到最后一行结束
/pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行
可同编辑命令一同使用,实现编辑操作:d,y,c
w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中
r /PATH/TO/SOMEFILE:将指定的文件中的文本读取并插入至指定位置
(2)查找机制:
/PATTERN:从当前光标所在处向文件尾部查找能够被当前模式所匹配到的所有字符串
?PATTERN:从当前光标所在处向文件首部查找能够被当前模式所匹配到的所有字符串
n:下一个,与命令方向相同
N:上一个,与命令方向相反
(3)查找并替换
s:末行模式的命令;使用格式:
s/要查找的内容/替换为的内容/修饰符
要查找的内容:不能使用正则表达式,但可以引用
直接引用查找模式匹配到的全部文本,要使用&符号
注意:可把分隔符替换为其常用字符
s@@@
s###
vim的多文件功能
用法:vim FILE1 FILE2...
文件间切换:
:next 下一个
:prev 上一个
:first 第一个
:last 最后一个
退出所有文件:
:wqall 保存所有文件并退出
:wall 保存所有文件
:qall 退出所有文件
多窗口:
-o:水平分割窗口
-O:垂直分割窗口
在窗口间切换:ctrl+w,ARROW(上下左右键)
注意:单个文件也可以分割为多个窗口进行查看
ctrl+w,s:水平分割窗口
ctrl+w,v:垂直分割窗口
定制vim的工作特性
注意:在末行模式下设定的特性,仅对当前vim进程有效
永久生效:
全局:/etc/vimrc
用户个人:~/.vimrc 默认这个文件是不存在的,需要自己去创建
1、行号
显示行号:set number
取消显示行号:set nonumber
可简写:ser nu | set nonu
2、括号匹配高亮
匹配:set showmatch 简写:set sm
取消:set noshowmatch 简写:set nosm
3、自动缩进
启用:set ai
禁用:set noai
4、高亮搜索
启用:set hlsearch
禁用:set nohlsearch
5、语法高亮:
启用:syntax on
禁用:syntax off
6、忽略字符大小写
启用:set ic
禁用:set noic
获取帮助:
:help
:help subject
如何设置tab键缩进4个字符