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/init.d/functions ./

1.然后用vim打开文件

2.然后将第一行移动到第五行

3.将第8行以后的全面行都删除

4.将第一行到底7行的内容复制一次,粘贴到第7行下面

5.然后还原第七行中的内容

6.保存退出

先执行命令

cd /tmp

cp /etc/init.d/functions ./

1.然后用vim打开文件

2.跳转到第443行

3.跳转到最后一行

4.向上翻1屏

5.将664行中settings中的i替换为大写

6.跳转到第2行

7.将第3行以后的全部内容都删除

6.保存退出

先执行命令

cd /tmp

cp /etc/init.d/functions ./

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的更多相关文章

  1. tomcat使用详解(week4_day2)--技术流ken

    tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发 ...

  2. vim编辑器详解(week1_day3)

    vi编辑器   作用:编辑文本文件中的内容的工具   命令历史   末行模式中,以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令.   启动vim   在命令行窗口中 ...

  3. vim编辑器详解

    vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率. vi是“visual interface”的 ...

  4. 【CNMP系列】VIM编辑器详解

    缘起 大学的时候做过Linux内核驱动程序研发,之前写C语言就是用的Vim编辑器,当年的Vim还不如今天之强大,当时的插件也没有现在这么多,只是觉得这个编辑器能满足我想要的所有,查看Linux内核代码 ...

  5. MySQL系列详解八:MySQL多线程复制演示-技术流ken

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  6. Ansible基础认识及安装使用详解(week5_day1_part1)--技术流ken

    Ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量 ...

  7. 学会这个删库再也不用跑路了~ --技术流ken

    前言 相信每一个学IT的人或多或少都听说过从删库到跑路这个梗~下图也是在各种交流群屡禁不止,新人听着也是瑟瑟发抖. 人们茶余饭后,街头巷角难免要问... 下面技术流ken就教给各位新手们一招删库再也不 ...

  8. Docker之使用Dockerfile创建定制化镜像(四)--技术流ken

    前言 在之前的博客<Docker端口映射及创建镜像演示(二)--技术流ken>,演示了如何使用一个现有容器创建一个镜像,以及镜像在阿里云的上传和下载. 但是这样的镜像有很大的局限性,不能根 ...

  9. Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken

    前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)--技术流ken>,<Ansible常用模块介绍及使用(二)--技术流ken><Ansible剧本介绍及 ...

随机推荐

  1. Analysis CDI

    CDI是一组服务,它们一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术.CDI设计用于有状态对象,还有许多更广泛的用途,允许开发人员以松散耦合但类 ...

  2. 锐捷交换机配置DHCP SERVER给固定的MAC地址分配静态IP

    今天突发奇想,想给自己的手机分配固定地址,使得接入公司无线网络时每次都取到同一ip地址,这样可以排除认证登录问题. 上网溜达一下,记录下锐捷官方的[常见问题]如下,经验证可行. 需求: 给MAC地址为 ...

  3. diy 滚动条 样式 ---- 核心代码

    参考自 : https://blog.csdn.net/qq_38881495/article/details/83689721 .chapter_data position relative wid ...

  4. 【转】线段树完全版~by NotOnlySuccess

    线段树完全版  ~by NotOnlySuccess 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉 ...

  5. 问题:AJAX的send参数里,空格以及它后面的数据在传递时消失(已解决)

    今天,我在写关于前端向后台传递一些数字进行排序,并把结果返回到前端的程序.我用的是POST方式,须要在send里面写键值对. 前端和后台都写完,但是,前端传递给后台的数据是一部分,我检查了下,发现获取 ...

  6. Reactjs组件中的方法为什么绑定this?

    前言:Reactjs中的定义的方法其实是基于实例的原型方法:es6默认严格模式   问题:在Reactjs组件中写入以下代码,那么执行结果会是什么呢? ··· 结果是这样的: 对的,你没看错,不是do ...

  7. sublime text3 在 14.04.1-Ubuntu 下的中文输入

    1.安装 fcitx sudo add-apt-repository ppa:fcitx-team/nightly // 添加FCITX仓库. sudo apt-get update // 更新仓库. ...

  8. Hibernate4集成spring4报错----No Session found for current thread

    在编写一个Hibernate4集成spring4的小demo的时候出现了该错误: org.hibernate.HibernateException: No Session found for curr ...

  9. 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 webservice/API

    2018 .NET开发者调查报告: .NET Core 是怎么样的状态,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议.这仅代表我的个人意见, 我有充分的理由推荐.net 程序 ...

  10. [python] PyMouse、PyKeyboard用python操作鼠标和键盘

      1.PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用.支持的平台及依赖如下: Linux - Xlib Mac - Quart ...