1.为什么学习vi?

  • vi很多系统都预装,如果我们的系统没有图像界面,可以使用vi
  • vi是轻量级且执行快速的编辑器

2.vi的几种模式

命令模式、插入模式、底行模式

1) 命令行模式(command mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

2) 插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

3) 底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。

不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)

一、启动与关闭vi

1.启动

huiubantu@ubuntu:~$ vi

或者新建一个vi文件

huiubantu@ubuntu:~$ rm -f foo.txt
huiubantu@ubuntu:~$ vi foo.txt 会出现一个每行开头都是波浪号~的空文件,波浪号~指示那一行不存在文本

2.关闭vi,需要注意是在命令模式下

:q   #在vi编辑器中

或者确认真的关闭vi

:q!

二、编辑模式

1.进入插入模式

i按键进入,之后可以输入文本,当按下ESC按键,退出插入模式并返回命令模式

2.保存我们的工作

命令模式下(就是ESC之后)输入ex命令

:w    另外,保存并退出可以用:w再用:q 也可以直接用:wq

三、基本编辑操作

1.撤销上一次的修改

命令模式下,按u按键

2.追加文本(在行尾)

命令模式下,A按键

3.打开新的一行

命令状态下,o按键在当前行的下边打开一行,O按键在当前行的上边一行打开一行

4.删除文本

x按键会删除光标位置的一个字符,x命令之前带一个数字指明要删除的字符个数;

d命令之前带上一个数字指明要执行的删除次数,d命令之后总是带上一个移动命令,用来控制删除的范围

5.剪切、复制和粘贴文本

d 命令,删除的部分被复制到一个粘贴缓冲区中(看作剪切板)。过后我们执行小 p 命令把剪切板中的文本粘贴到光标位置之后,或者是大 P 命令把文本粘贴到光标之前。

y 命令用来“拉”(复制)文本,和 d 命令剪切文本的方式差不多。    这里有一些详细命令不像述

6.连接行

J按键用来把行与行之间连接起来(区别小写的 j 是用来移动光标)

四、查找和替换

1.查找一行

f命令查找一行,移动光标到下一个所指定的字符上。

如fa命令就是把光标定位到了同一行中的下一个出现的a字符上

2.查找整个文件

/命令

当你输入/命令后,一个 “/” 字符会出现在屏幕底部。下一步,输入要查找的单词或短语后,按下回车。光标就会移动到下一个包含所查找字符串的位置。通过 n 命令来重复先前的查找。

3.全局查找和替换

使用以下ex命令

:%s/line/Line/g      :是运行一个ex命令 %制定操作的行数是从第一行到最后一行  s指定操作是替换  /line/Line是查找类型与替换类型  g是全局的意思

 五、编辑多个文件

1.格式 vi file1 file2 file3……

2.文件之间的转换

从这个文件转到另一个文件

:n

回到先前的文件使用

:N

3.从一个文件复制内容到另一个文件

首先转换到缓冲区 1( foo.txt),输入:

:buffer 

下一步,把光标移到第一行,并且输入yy来复制这一行

然后,转换到第二个缓冲区

:buffer 2

移动光标到第一行,输入p命令把我们从前边文件中复制的一行粘贴到这个文件

4.插入整个文件到另一个文件

首先,打开要粘贴到的一个文件的vi会话

huiubantu@ubuntu:~$ vi ls-output.txt

然后在最后一行输入ex命令

:r foo.txt   表示读入foo.txt文件的所有内容

 六、保存文件

1.命令模式下,输入ZZ会保存并退出当前文件

2.ex命令:wq同样会保存并退出当前文件

 七、移动光标

命令模式下,vi提供了大量的移动命令,不详述

10 vi简介(重点)的更多相关文章

  1. Debian Vi 简介

    1.Vi 简介    Vi 是 Unix 世界里极为普遍的全萤幕文书编辑器,几乎可以说任何一台  Unix 机器都会提供这套软体.Linux 当然也有,它的 vi 其实是 elvis (版权问题),不 ...

  2. 140227项目开发及上线过程遇到的10个问题(重点: FCK过滤替换)

    1.替换条件判断问题 String s = (String)map2.get("contentIntro"); if(s != null && s.length() ...

  3. Day01_UNIX基础及VI简介

    2013年09月29日 星期日 11时35分58秒 Linux 是一个区别于Windows的操作系统 Linux 是一个多用户的操作系统 Linux 系统通过账号区分不同的用户 在使用Linux系统的 ...

  4. -1-0 Java 简介 java是什么 java简单介绍

    Java是一门纯粹的面向对象的高级的平台无关的编程语言 官网介绍: 了解 Java 技术  https://www.java.com/zh_CN/about/ 推荐词条: https://zh.wik ...

  5. ML.NET 0.10特性简介

    IDataView被单独作为一个类库包 IDataView组件为表格式数据提供了非常高效的处理方式,尤其是用于机器学习和高级分析应用.它被设计为可以高效地处理高维数据和大型数据集.并且也适合处理属于更 ...

  6. Apache Commons Lang » 3.10使用简介

    ============================================================= 行文介绍: 1.诞生背景 2.引入方案 3.简单介绍 4 .详情介绍 文档: ...

  7. 2017/2/10:Manven简介与项目管理(入门)

    1.Maven工程的创建 2.使用Manven manven配置文件主要集中在 http://m.blog.csdn.net/article/details?id=50316383

  8. Linux:vi & vim(待学)

    VI编辑器_终端编辑器 目标 vi简介 打开和新建文件 三种工作模式 常用命令查询 1 简介 1.1 学习vi的目的 在工作中, 要对 服务器上的 文件进行 简单 的修改, 可以使用 ssh 登录到远 ...

  9. Redis从入门到高级笔记【涵盖重点面试题】

    NoSQL数据库 DBEngines网站中会统计目前数据库在全世界的排名 1.1 什么是NoSQL 最常见的解释是"non-relational",很多人说它是"Not ...

随机推荐

  1. [51NOD1405] 树的距离之和(树DP)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 (1)我们给树规定一个根.假设所有节点编号是0-(n-1 ...

  2. How to evaluate a transimpedance amplifier (part 1)

    In this blog, I want take a different approach and describe the technical challenge encountered whil ...

  3. kaili 2.0 开启ssh远程

    第一步:更改sshd_config文件

  4. C library function - tmpfile()

    Description The C library function FILE *tmpfile(void) creates a temporary file in binary update mod ...

  5. ACCESS 数据库使用配置调整解决方案

    分享到 一键分享 QQ空间 新浪微博 百度搜藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 64位服务器无法使用ac ...

  6. jdk和eclipse位数不一致出错

    32位的eclipse无法打开:找不64位jdk6的jvm.dll文件(64位的没有这个文件).网上说法可以通过设置eclipse初始化文件xxx.ini改变方式: 直接换成了同位数的了,没去试了.

  7. 刻录DVD_待整理

    1.各种 IDE 2. 3. 4. 5.

  8. 图片的copy,从一个目录复制到另一个目录

    代码: public function index(){ $path='G:/相片/2014.9.8深圳莲花山/IMG_1282.JPG'; $path=iconv('utf-8','gb2312', ...

  9. Android 四种简单的动画(淡入淡出、旋转、移动、缩放效果)

    最近在Android开发当中,用到的动画效果. public void onClick(View arg0) { // TODO 自动生成的方法存根 switch (arg0.getId()) { c ...

  10. Could not initialize class sun.awt.X11GraphicsEnvironment

    报错: