文章目录
Linux中的Vim编辑器是一款功能强大的文本编辑器,广泛应用于程序员和系统管理员中。Vim是“Vi IMproved”的缩写,它在Vi编辑器的基础上增加了许多改进和新特性。以下是一个详细的Vim编辑器教程,包含基本操作和一些高级功能。
命令格式
vim [option] file...
常用选项
-d vim diff模式,比较多个文件之间的不同内容行,等同于vimdiff命令 -R 只读模式打开文件 -b 二进制模式打开二进制文件 -r 列出当前目录下所有swap文件 -r <file> 恢复模式:打开文件file的崩溃文件<.file.swp> -p[N] 打开N个tab对应多个文件 -o[N] 打开N个窗口,且窗口垂直排列 -O[N] 打开N个窗口,且窗口水平排列 + 打开文件后,并且光标处于文件末行首部 +N 打开文件后,光标处于文件第N行首部 +/{ char} 打开文件后,光标处于从文件首行开始的第一个{ char}所在行 --cmd [command] 加载任何vmrc配置前,先执行conmand命令 -i <viminfo> 使用自定义的viminfo文件替代默认的.viminfo --startuptime <file> 将vim启动过程信息写入文件 file
配置文件
/etc/vimrc System wide Vim initializations.
~/.vimrc Your personal Vim initializations.
VIM的三种视图模式
- 命令模式
- 编辑模式
- 末行模式
三种模式之间切换
命令模式 --> : -->进入末行模式
命令模式 --> i/a/o I/A/O --> 进入编辑模式
编辑模式 --> ESC --> 进入命令模式
末行模式 --> ESC --> 进入命令模式
VIM 快捷键
命令模式进入编辑模式
i:当前光标所在字符前插入字符
a:当前光标所在字符后插入字符
o:当前光标所在行下一行插入字符,新增一行
I:在当前光标所在行首部插入字符
A:在当前光标所在行尾部插入字符
O:在当前光标所在行上一行插入字符,新增一行
命令模式
删除操作
x 删除当前光标所在位置的一个字符
[n]x 删除当前光标及其之后的n个字符
X 删除当前光标之前的一个字符
dd 删除当前光标所在行
[n]dd 删除当前光标所在行及其之后的n行
dw 删除从当前光标位置到下一个单词开头位置的文本
D 删除当前光标至行尾的文本
cc 删除光标所在行,并且转为编辑模式
cw 删除光标所在处的单词,并进入编辑模式
caw 删除光标所在处的单词及其后面的空格
u 撤销上一次操作
复制操作
yy 将当前行复制到缓存区
nyy 将当前行向下n行复制到缓冲区
yw 复制从光标开始到词尾的字符
nyw 复制从光标开始的n个单词
y^ 复制从光标到行首的内容
y$ 复制从光标到行尾的内容
p (lower)如果删除的或复制的是整行内容,则粘贴到光标所在行的下方(下一行),如果复制的或删除的是非整行内容,则粘贴至光标所在的字符后面(同一行)
P (upper)如果删除的或复制的是整行内容,则粘贴到光标所在行的上方(下一行),如果复制的或删除的是非整行内容,则粘贴至光标所在的字符前面(同一行)
. 重复刚才的操作
搜索
/word 从当前光标所在行向下搜索word词,按n可以向下跳转到下一个word处(N反向跳转)
?word 从当前光标所在行向上搜索word词,按n可以向下跳转到上一个word处(N反向跳转)
:nohlsearch (在末行模式) 取消所有高亮词显示
移动光标
h 左移
l 右移
j 下一行
k 上一行
以上四个移动指令前可以加入数字,来实现多个字符或多行移动。
逐个单词移动
w 移动至下一个单词词首 (lower)
e 移动至当前或下一个词尾
b 移动至当前或下一个词首
行内跳转
0 光标跳到行首(绝对行首)
^ 光标跳到行首(行首第一个字符)
行间跳转
[n]+ 向下跳n行
[n]- 向上跳n行
#G 输入数字#,然后输入“G" 可以直接跳转到第#行
G 跳转到最后一行
gg 跳转到第一行
保存退出
ZZ
末行模式
保存、退出
:[N] 回车后光标跳到第N行
:q 不保存直接退出
:w 保存
:wq = :x 保存退出
:wall 保存所有打开的文件
:w filename1 将文件另存为filename1
:wnext 保存当前文件并跳到下一个文件
:wprev 保存当前文件并跳到上一个文件
:q! 不保存强制退出
:u 撤回上一次操作
:e filename2 继续打开新的filename2文件编辑
分割窗口
- 横向打开或者创建新窗口
在当前vim窗口中,使用末行split命令打开新文件或者创建新文件(如果输入的filename不存在,则会创建一个名为filename的新文件)。
:split [filename]
直接创建新文件
:new [new_filename]
- 纵向打开或创建新窗口
与横向类似,打开已存在的文件或者新建文件窗口。
:vsplit filename 也可以简写为:vsp filename
:vnew filename 只能新建文件窗口
关闭多窗口
:close 只能暂时关闭当前窗口,不能像wq一样保存文件并退出,且最后一个窗口不能使用close关闭。
:wqall 全部保存退出
多窗口建切换
使用ctrl
+ w
+ <h、j、k、l>
在多个窗口之间切换光标。
ctrl
+ w
+ h
光标移动到左侧窗口
ctrl
+ w
+ j
光标移动到下方窗口
ctrl
+ w
+ k
光标移动到上方窗口
ctrl
+ w
+ l
光标移动到右侧窗口
多窗口大小调整
ctrl+w + 纵向扩大(行数增加)
ctrl+w - 纵向缩小 (行数减少)
Ctrl + W + < :将当前窗口的宽度减少
Ctrl + W + > :将当前窗口的宽度增加
:res(ize) num 例如::res 5,显示行数调整为5行
:res(ize)+num 把当前窗口高度增加num行
:res(ize)-num 把当前窗口高度减少num行
:vertical res(ize) num 指定当前窗口为num列
:vertical res(ize)+num 把当前窗口增加num列
:vertical res(ize)-num 把当前窗口减少num列
vim与shell之间切换
在vim窗口的末行模式,使用
:shell
进入shell会话。
从shell返回vim,使用
exit
多标签
创建新标签
:tab new [tab_name]
返回上一个标签
:tabprevious
切换到后一个标签
:tabnext
:tabfirst 第一个标签
:tablast 最后一个标签
关闭标签
:tabclose
替换内容
:s/old/new 用new替换光标所在行中首次出现的old
:s/old/new/g 用new替换光标所在行中所有的old
:s/old/new/gi 用new替换光标所在行中所有的old,并且忽略old字母的大小写
:s/old/new/gc 用new替换光标所在行中所有的old,并且在替换前会提示确认
:n,ms/old/new/g 用new替换从n到m行里所有的old
:%s/old/new/g 用new替换当前文件里所有的old
:.,$s/old/new/g 用new替换当前行至末行的所有old
:.,$-1s/old/new/g 用new替换当前行至倒数第二行之间的所有old
删除中间的某些行
:STARTLINENUMBER,ENDLINENUMBERd
:.,+Nd 表示删除从当前行及其之后的N行内容。
:.,-Nd 表示删除从当前行及其之前的N行内容。(会有提示逆向删除操作,需要Y确认)
:.,$ 表示删除当前行之末行的所有内容。
:1,$ 删除整个文档所有内容
临时修改当前vim的环境参数
:set number 显示行号
:set nonumber 取消行号显示
:set cursorline 高亮当前行
:set nocursorline 取消高亮当前行
:set cursorcolumn 高亮当前列
:set nocursorcolumn 取消高亮当前列
:set fileformat=unix 将文本修改为unix格式
#附1.在线练习vim