1、vim简介
vi编辑器是由加州大学伯克利分校、 bill joy研发的。它是 Linux下最基本的文本编辑器,而且也是一款文本模式编辑器。vim是vi的增强型,被推崇为类vi编辑器中最好的编辑器。vim命令的操作方法与vi一模一样,只是在vi基础上对内容显示上进行了颜色的衬托,对相关指令以变色,以区别其它文字,更加人性化了。通常我们称vi与vim,都为vi。nvim更更好用。
它有三种模式:命令、行底、编辑模式,三种模式之间的切换如下图所示:
2、进入退出方式
"进入vi的方式"
vi
vi newfile #打开或新建文件
vi newfile + #打开文件之后光标处于文件最末行
vi newfile +n #打开文件之后光标处于文件第n行
"保存文件的方式"
:w [filepath] #保存当前编辑的文件,若filepath有指定则表示另存为文件
:w! [filepath] #强制保存文件,若文件存在则覆盖
"退出vi的方式"
命令模式下:连续按两次大写Z键,保存并退出
行末模式下:
:q #退出vi,前提是该文件没有被编辑过
:q! #强制退出vi,放弃修改
:wq #保存并退出vi
:wq! #强制保存并退出vi
3、命令模式下
1.光标可移动的单位:
- (1)字符: 汉字由二个ASCII字符宽度,移动的单位是一个汉字,英文或数字等是一个ASCII字符宽度
- (2)行: 文本的一行,可用行号定位
- (3)屏幕: 分成半个屏幕高或整个屏幕高(页)
- (4)行首和行尾:文本行的行尾和行首
- (5)字: 广义字和狭义字
广义字:由空格作为间隔符
狭义字:英文单词、标点符号及一些特殊字符均作为一个字 - (6)句: 以逗号、句号、问号、感叹号结尾且后面有二个以上(含二个)空格或一个换行符的字符序列。
- (7)段: 以一个空白行开始和结束的字符序列
"光标移动"
##按字符移动##
四个方向键
k j h l :各自按上下左右移动一个字符
space backspace ctrl+n ctrl+p :各自向右左下上移动一个字符
##按行移动##
0 :本行行首
^ :第一个非空白字符
$ :本行行尾
- :上一行行首
<n>G :跳到第n行行首,缺省则为最末行
##按字移动##
w :安照单词的首字母向后移动,不忽略标点符号
W :安装单词的首字母向后移动,忽略标点符号
b :按照单词的首字母向前移动,不忽略标点符号
B :按照单词的首字母向前移动,忽略标点符号
e :按照单词末尾字母向后移动,不忽略标点符号
E :按照单词末尾字母向后移动,忽略标点符号
按句、段落移动:
( :将光标移到当前句句首,如果已处在句首,则移到前一句句首
) :将光标移到下一个句子的开头
{ :将光标移到当前段段首,如果已处在段首,则移到前一段段首
} :将光标移动到下一段段首
"翻页"
Ctrl + f 向后翻一页
Ctrl + b 向前翻一页
Ctrl + d 向后翻半页
Ctrl + u 向前翻半页
Ctrl + e 屏幕向下翻一行
Ctrl + y 屏幕项上翻一行
"剪切/删除"
x : 删除光标处的字符
nx : 删除光标位置起的右n个字符
X : 删除光标前的字符
nX : 删除光标位置前的左n个字符
dd : 删除当前行
ndd : 删除从当前行算起随后的n行
D(d$): 删除光标起到行尾的内容
d0 : 删除光标前一个字符到行首的内容
dw : 删除一个单词
ndw : 删除n个单词
"文本的修改"
c object : 改变光标位置起到object位置的内容.
C(c$) : 改变光标位置起到行尾的内容.
nC : 改变光标位置起的n行内容
cc : 改变当前行的内容.等价于dd和O的组合
ncc : 改变当前行起n行的内容
r(R) : 替换光标所在的字符,替换后依然为命令模式
s(S) : 替换光标所在的字符,替换后切换为插入模式
"复制/粘贴"
##字复制命令##
yb 复制光标前的一个字
yw 复制光标后的一个字
##行复制命令##
<n>yy 复制光标下面的N行
y$ 复制光标后面所有的字符
y0 复制光标前面所有的字符
##粘贴命令##
p 把已经复制的字或者行粘贴到光标之后
"撤销"
u 恢复最后一个指令之前的结果。
U 恢复光标该行之所有改变
"命令模式常用操作:"
dd :删除光标所在的行;
3dd :删除从当前光标开始起的3行内容;
4dd :就是删除从当前光标开始起的4行内容;
yy :剪切当前光标行;
3yy :剪切从当前光标行开始起的3行。(包括当前光标行);
p :paste粘贴;
u :undo撤销;
$ :直接定位到当前行的行末;
4、行底模式下
"命令->行底"
: 命令
/ 查找(自顶向下)往光标之后寻找该字符串
? 查找(自底向下)往光标之前寻找该字符串
"复制/粘贴"
:1,5 co 20 #将1到5行拷贝到20行下。
"撤销"
:undo #恢复上一个指令之前的结果
"搜索与替换"
/ 查找(自顶向下)往光标之后寻找该字符串
? 查找(自底向下)往光标之前寻找该字符串
n 搜到相应字符后,往下继续寻找下一个相同的字符串
N 搜到相应字符后,往上继续寻找下一个相同的字符串
s 搜索某行范围,search
g 搜索改行所有匹配的字符
##例子##
替换10到20行之间,匹配到的字符:
: 10,20s/old/new 替换10到20行的第一个匹配到的字符
: 10,20s/old/new/g 替换10到20行所有匹配到的字符
替换文本中所有匹配到的字符:
: %s/old/new 替换所有行第一个匹配到的字符
: %s/old/new/g 替换所有行所有匹配到的字符
注:替换时没有指定到的行中出现了需要匹配的字符串时,该字符串会高亮显示。
注:有些字符不能直接替换,需要加上转义符‘\’。
"设定vi环境"
:set autoindent 设置自动对齐
:set smartindent 设置智能对齐
:set tabstop=n 设置制表符tab的空格数
:set shiftwidth=n 设置换行时对齐的空格数
:set showmatch 设置智能匹配,左括号与右
括号匹配
:set vb t_vb= 去取命令错误时的响声
:set nu 显示行号 number
:set nonu 取消显示行号 nonumber
:set background=dark 设置背景颜色为暗色
:set background=light 设置背景颜色为亮色
:syntax [on | off ] 语法打开/关闭高亮
:set hls 高亮关键字
:set nohls 取消高亮关键字
"vi启动时自动加载设定"
vi启动时自动加载环境配置:
vi在启动时会自动加载当前用户目录下.vimrc文件,可以在该文件中设定启动的环境配置。
方法:在用户根目录下打开.vimrc :
vi ~/.vimrc
将之前所述的环境设定加入到该配置文件中的最末尾处,保存并退出。
5、编辑模式下
"命令->编辑"
##追加模式## append
a 由光标之后加入资料。
A 由该行之末加入资料。
##插入模式## insert
i 由光标之前加入资料。
I 由该行之首加入资料。
##新增行模式## open
o 新增一行于该行之下供输入。
O 新增一行于该行之上供输入。
6、常用命令
"下面这几个命令要好好记住,用得很多!!!"
移动到开始、结束和结尾。
gg:移动到文件顶端开始
G:移动到文件底端开始
M:移动到文件中间位置
"命令模式"
ggVG 全选
dd 删除
“+y 复制 #英文状态下的双引号
p 粘贴
zz 退出(大写)
2,7 co 10 将第二行到第七行拷贝到第十行下面
a :在光标之后,插入内容;
A :在光标的行末,插入内容;
i :在光标之前,插入内容;
I :在光标的行首,插入内容;
o :在光标的下一行,插入内容;
O :在光标的上一行,插入内容;
"行底模式"
:wq 表示“保存退出”;
:wq! 表示“保存并强制退出”;
:q! 表示“强制退出”;
:set nu 显示行号;
:set nonu 不显示行号;
:num num为10就表示跳转到第10行(一般显示行号后再用这个);
:/单词 寻找单词,多个单词时用n向后寻找,N向前寻找,默认会高亮显示;
:noh 取消高亮显示;
vi提供同时编辑多个文件的功能,方法如下:
"打开多个文件"
vi file1 [file2] [file3] .....
"在多个文件之间的编辑切换"
##在末行模式下##
:n 载入下一个文件
:N 载入上一个文件
当完成一个文件的编辑后,需要保存该文件,才可切换
##两个文件之间的编辑切换##
命令模式下:
ctrl+shift+6
末行模式下:
:e#