vi编辑器
 
作用:编辑文本文件中的内容的工具
 
命令历史
 
末行模式中,以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。
 
启动vim
 
在命令行窗口中输入以下命令即可
vim 直接启动vim
vim filename 打开vim并创建名为filename的文
 
vim的模式
 
 
 
vi的工作模式
 
命令模式:仅仅可以查看内容,但是不能进行修改(默认)
输入模式:可以对文件中的内容进行修改
末行模式:此模式可以执行一些命令
 
 vi打开文件
 
vi打开文件
vi 文件名
 
注意:
1. vi打开文件,如果发现文件是空的,那么说明你所打开的文件是不存在的
2. 也就是vi既可以打开现有的文件,也可以创建新文件,只是所创建的新文件内容是空白的
3. vi有增强版本,称之为vim(建议用vim)
4. vi是用来编辑文本文件的,不能用来打开目录
 
情况1:从命令模式到输入模式
 
i:在光标所在位置的前插入内容
I:将光标移到到行首,然后进入输入模式
a:将光标向后移到一位,然后进行插入模式(输入的内容会在光标原始位置的后一位。
A:在当前行尾插入
o:在光标所在行的下面新开一行,然后进入输入模式
O:在光标所在行的开面新开一行,然后进入输入模式
 
命令模式下的常用操作
 
第一类操作:复制、移动删除文件内容
yy:复制光标所在的行
nyy:复制光标所在的行开始向下的N行
dd:剪切光标所在的行
ndd:剪切光标所在的行开始向下的N行
p(小):粘贴到光标所在行的下面
P(大):粘贴到光标所在行的上面
 
D:删除光标所在位置到行尾的内容
dG:删除光标所在的行到末尾全部的行
 
第二类操作:撤销和重复执行的相关操作
u:撤销上次所指向的操作(相当于windows中ctrl+z)
nu:撤销n次操作(n的值最大是50)
ctrl+r:撤销刚刚所撤销的那个操作(相当于windows中ctrl+y)
 
.:重复执行上一次所做的操作
 
 
第三类操作:跳转相关的操作
nG:跳转到第n行
G:直接跳转到最后一行
 
0:跳转到行首(会认为空格也是内容,此时会跳转到空格的最前面)
^:跳转到行首(不认为空格是内容,此时会跳转到第一个非空字符)
$:跳转到行尾
 
ctrl+f:向下翻一屏
ctrl+b:向上翻一屏
 
第四类操作:替换相关操作
r:替换一个字符(替换完成之后,自动返回到编辑模式)
R:进入替换模式(要想退出替换模式,按esc)
 
第五类操作:查找
/string:在文件中搜索指定的字符串
n:正向查找
N:反向查找
 
情况2:从输入模式到命令模式
 
esc
 
 
情况3:从编辑模式到末行模式
 
进入末行模式的方式:在编辑模式下按shift+:
 
末行模式下的常用操作
 
第一类命令:行号
set nu:显示行号
set nonu:关闭行号
 
第二类命令:跳转
num:直接跳转到第num行
$:直接跳转到最后一行
 
第三类命令:取消匹配到的内容的高亮
nohl
 
第四类命令:替换
start,end s/原始内容/替换内容/g
(分隔符不一定是/,只要是三个相同的符号即可)
 
 
注意:
如果不用g,那么仅仅会替换每行的第一个找到的对象
如果使用g,那么会将范围内所有找到的对象全部做替换
 
例子:将54到56之间的echo替换为bajie
:54,56 s/echo/bajie/g
 
例子:将文件中全部的echo替换为bajie
:1,$ s/echo/bajie/g
或
:% s/echo/bajie/g
 
例子:将文件的50-100行行首添加一个#
:50,100 s/^/#/g
 
例子:1-5行首添加空格
:1,5 s/^/ /g
 
例子:将全部行首的空格删除
:1,$ s/^ //g
 
例子:将全部行首的#删除
:1,$ s/^#//g
 
例子:将1-5行中的a删除
:1,5 s/a//g
 
例子:在1-5行的末尾添加一个#
:1,5 s/$/#/g
 
例子:将文件中全部的/替换为+
:% s@/@+@g
 
补充1:
^:表示行首
$:表示行位
 
 
第五类命令:保存和退出
w:执行保存操作(保存到原始文件中)
w /path/to/file:实现文件另存为
q:退出
!:强制执行操作
 
第六类命令:高级操作
!命令:在vi中直接执行命令
r /path/to/file:将file中的内容导入到当前文件中
set tabstop=4:将tab缩进的字符数设置为4个
set ai:设置自动缩进
set noai:取消自动缩进
 
第七类命令:复制、移动、删除多行的操作
start,end d:删除多行
start,end m dest:将多行移动到指定行的下面
start,end co dest:将多个复制到指定行的下面
 
例子:将59到198之间的内容复制到233行的下面
59,198 co 233
 
 
分屏操作
 
vim -o file1 file2:实现水平分屏
vim -O file1 file2: 实现垂直分屏
ctrl+w:切换到另一个分屏
 
 
打开文件的小技巧
vim +num file:打开文件的时候,自动跳转到第num行(加号不可省略)
vim + file:打开文件的时候,自动跳转到最后一行
 
 
 
vi的配置文件
 
/etc/vimrc:全局配置文件,在这个文件中做的配置,会对所有用户生效
~/.vimrc:(默认不存在,需要自己手动创建)用户配置文件,仅仅对当前用户生效
 
1. 编辑vi的配置文件,实现可以自动显示行号、缩进4个字符、自动对齐
# vi ~/.vimrc
:set nu
:set ai
:set tabstop=4
 
vi崩溃缓存机制
 
用vim编辑一个文件的是,如果文件没有正常的关闭(wq、q、q!),那么就会生成一个崩溃缓存文件
 
 
崩溃缓存文件的和作用
1. 缓存文件是隐藏文件
2. 缓存文件基本格式是 .file.swp
3. 缓存文件的作用是用于在系统意外关机的情况下,恢复文件中的内容(修改了文件内容,意外关掉终端或者系统)
4. 缓存文件的使用方式
第一步:# vim -r .file.swp
第二步:保存退出
第三步:删除缓存文件
 
 
注意:
1. 如果文件发生了修改,那么无法直接退出
2. 如果要退出一个修改了的文件,有三种方式
方式1:先执行保存(w),然后执行退出(q)
方式2:直接保存并退出(wq)
方式3:不保存,并强制执行退出操作(q!)
 
 
练习
 
先执行如下命令
cd /tmp
cp /etc/rc.d/rc.local ./
 
然后用vim打开这个文件
然后在这个文件第三行写上自己的名字
然后返回到命令模式
 
 
 
先执行命令
cd /tmp
cp /etc/rc.d/rc.sysinit ./
 
1.然后用vim打开文件
2.然后将第一行移动到第五行
3.将第8行以后的全面行都删除
4.将第一行到底7行的内容复制一次,粘贴到第7行下面
5.然后还原第七行中的内容
6.保存退出
 
 
 
先执行命令
cd /tmp
cp /etc/rc.d/rc.sysinit ./
 
1.然后用vim打开文件
2.跳转到第443行
3.跳转到最后一行
4.向上翻1屏
5.将660行中time中的i替换为大写
6.跳转到第2行
7.将第3行以后的全部内容都删除
6.保存退出
 
 
先执行命令
cd /tmp
cp /etc/rc.d/rc.sysinit ./
 
1. 然后用vim打开文件,并显示行号
2. 在文件每行的末尾添加上 -自己姓名
3. 将文件的最后10行的行首添上#
4. 将以#开头的行的行首添加 newline
5. 取消行号、取消文件内容的高亮
6. 保存文件
7. 不保存强制退出
#######################
 
2. 用vim在tmp创建一个文件file,写入如下内容
# my info
my name is liuqi
your name is wukong#
we are going to xi tian#
my email is 161@qq.com
password is in /etc/passwd
over.
3. 将第2行到第6行的内容复制到第7行的下面,复制5次
4. 将在文件中查找单词 my
5. 执行一次保存操作
5. 将第7行到末行的首部添加一个#
5. 将文件中的/替换为=
6. 将 # my info 移动到 .over 的下面
7. 跳转到末行,再跳转到首行
8. 保存并退出
 
######################################
补充:
1. 创建空白文件的方式有两种touch、vi\vim
2. linux中,文件的后缀对于文件的属性没有任何影响,文件的属性只和创建文件的时候所执行的命令有关
3. linux中无论是命令还是文件名,都严格区分大小写
 
 
												
												
						- vim编辑器详解(week1_day3)--技术流ken
		vi编辑器 作用:编辑文本文件中的内容的工具 命令历史 末行模式中,以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 v ... 
- vim编辑器详解
		vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率. vi是“visual interface”的 ... 
- 【CNMP系列】VIM编辑器详解
		缘起 大学的时候做过Linux内核驱动程序研发,之前写C语言就是用的Vim编辑器,当年的Vim还不如今天之强大,当时的插件也没有现在这么多,只是觉得这个编辑器能满足我想要的所有,查看Linux内核代码 ... 
- vim命令详解
		VIM编辑常用技巧 vim编辑器 简介: vi: Visual Interface,文本编辑器 文本:ASCII, Unicode 文本编辑种类: 行编辑器: sed 全屏编辑器:nano, vi V ... 
- Vim配置文件-详解(.vimrc)
		Vim配置文件的作用 Vim启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim Vim分类 系统Vim配置文件/etc/vimrc 所有系统用户在启动 ... 
- Linux编辑器vim键盘详解
		下面的这张图,一看就明白了,从此,学习变的不再艰难! 补注:图中没有关于查找和替换的,应该用下面的.自上而下的查找操作                  /word小写的n和N自下而上的查找操作    ... 
- vim 命令详解
		vi: Visual Interface 可视化接口vim: VI iMproved VI增强版 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式) 输入模式 末行模式 模式转换: 编辑-- ... 
- linux下vim命令详解           转自:  zhanglong0426
		  高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的: :qx     开始记录宏,并将结果存入寄存器xq     退出记录模式@x     播放记录在x寄存器中的 ... 
- linux下vim命令详解
		高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的::qx     开始记录宏,并将结果存入寄存器xq     退出记录模式@x     播放记录在x寄存器中的宏命令 ... 
随机推荐
	
									- 自签名ssl
			openssl  req -nodes -newkey rsa:1024 -out myreq.pem -keyout privatekey.pem openssl req -in myreq.pem ... 
- ESP8266—“ICACHE_FLASH_ATTR”宏——解释含义
			const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 这种 ICACHE 开头的宏作 ... 
- 一例tornado框架下处理上传图片并生成缩略图的例子
			class coachpic(RequestHandler): @gen.coroutine def post(self): picurl = self.request.files[] print(& ... 
- yii项目连接多个数据库时, MySQL报错No such file or directory
			服务器错误 yii\db\Exception SQLSTATE[HY000] [2002] No such file or directory ###'xxx是项目根目录' #0 xxx/vendor ... 
- java常用检验接口control方式
			@Controller public class ItemController { @Autowired private ItemService itemService; @RequestMappin ... 
- luogu【模板】线性筛素数 (Miller-Rabin素数测试模板)
			这个感觉还是挺好理解的,就是复杂度证明看不懂~ Code: #include <cstdio> #include <algorithm> #include <cstrin ... 
- Codevs 4373 窗口(线段树 单调队列 st表)
			4373 窗口 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 给你一个长度为N的数组,一个长为K的滑动的窗体从最左移至最右端,你只 ... 
- js获取键盘编码
			原理:键盘上的按键都有各自的键码,通过这个键码可以来判断按下的是哪个键,下面函数可以获取键盘的键码,按下键盘按键就会在控制台打印出相应的键码 document.addEventListener(&qu ... 
- JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型
			此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ... 
- DMA数据传输
			从字面意思上看,DMA即为“直接内存读取”的意思,换句话说DMA就是用来传输数据的,它也属于一个外设.只是在传输数据时,无需占用CPU. 高速IO设备可以在处理器安排下直接与主存储器成批交换数据,称为 ...