VI是Linux/Unix下标配的一个纯字符界面的文本编辑器。由于不支持鼠标功能,也没有图形界面,相关的操作都要通过键盘指令来完成,需要记忆大量命令。因此很多人不大喜欢它,但同时由于键盘的方式往往比鼠标来得快,一旦熟练后用起来是有种非常流畅的感觉的,也有人因此而非常喜欢它。

不管你喜欢也好,不喜欢也好,VI是Linux的标配编辑器,很多时候你也只有这一个编辑器可用,如果要做一个Linux Coder,熟悉VI还是非常有必要的。

PS:由于VI的命令非常多,本文主要只介绍一些基础命令。并且就算是这些基础命令中,也有许多是不大常用的,我就把这些命令以灰色文字显示了,初学者可以不用太关注这些灰色命令。

两种工作模式

前面已经说过,由于VI没有图形界面,如翻页、移动光标、保存、退出等操作都必须借助键盘来完成。另外,VI还提供了大量快捷键来加速操作,因此,VI统的编辑模式下,还引入了一种新的工作模式——命令模式。

  • 编辑模式: 在此模式下,输入可见字符时和传统Windows环境下输入字符的功能相同。按Esc键可切换值命令模式。
  • 命令模式: 在此模式下,输入的可见字符对应的是命令。当插入命令执行后进入编辑模式。

PS:有的文章中还列举了一种Last Line模式,这个可以算作一种特殊的命令模式,只不过命令会显示在最后一行,并且需要敲回车才能执行。这些命令通常以 :/?$ 等特殊字符开头。

模式查询:要判断当前处于那种模式,可以通过最后一行(状态栏)来判断:如果处于编辑模式,则显示为如下两种状态。

        

模式间的切换:在编辑模式下,通过Esc键可以进入命令模式;命令模式下,执行某些插入命令后进入编辑模式。如果你不知道当前处于那种模式下,按ESC进入命令模式,按Insert进入编辑模式。

启动VI

VI的启动参数有不少,但通常的使用方式如下:vi filename

如果参数中的文件存在,则打开该文件,如果参数中的文件不存在,则会新建该文件(不是立即创建,而是在保存的时候创建)。

插入文本

刚进入VI时,是出于命令模式的,这是是无法输入文本的,因此需要进入插入模式。进入插入模式的命令有如下几个:

  • i    从目前光标所在之处插入文字
  • a    从目前光标所在下一个字符插入文字
  • o    往下插入一个空行
  • O    往上插入一个空行

输入这几个命令后,就进入了编辑模式,可以通过屏幕下方最后一行看到当前为插入状态:

可以通过Insert键切换插入状态和改写状态(和图像界面中一样)。

另外,在命令模式下,也可以通过Insert键进入编辑模式(插入状态),不过通常还是前面介绍的四个命令来进入编辑模式。

离开和保存文件

在VI中,离开和保存文件对应的命令有这几个(使用前记得进入命令模式):

  • :w            保存
  • :w filename     另存为
  • :wq            保存并退出 [常用]
  • :q!            强制退出
  • SHIFT+zz        保存并退出,功能同:wq [常用]

移动光标

在VI中,移动光标并不是我们游戏中常用的WASD,而是h、j、k、l,分别控制光标左、下、上、右移一格,分别分布在右手四个指头,新手需要一段时间来适应。使用非常频繁,需要熟练掌握。

其它一些光标控制命令如下:

  • Ctrl+B:屏幕往后移动一页。
  • Ctrl+F:屏幕往前移动一页。
  • Ctrl+U:屏幕往后移动半页。
  • Ctrl+D:屏幕往前移动半页。
  • gg:移动文章的开头。
  • G:移动到文章的最后。
  • w:光标跳到下个word的开头。
  • e:光标跳到下个word的字尾。
  • b:光标回到上个word的开头。
  • $:移到光标所在行的行尾。
  • ^:移到该行第一个非空白的字符。
  • 0:移到该行的开头位置。
  • #:移到该行的第#个位置,例:51、121。

另外,还有几个行操作相关命令集中介绍一下

  • :set nu        显示行号
  • :set nonu        隐藏行号
  • :#            移动到第#行,如:15
  • Ctrl+G:     在状态栏显示当前进度
  • #G:        移动到第#行,例:15G

删除文字

  • x:删除光标所在位置的后面一个字符。
  • #x:例如,6x 表删除光标所在位置的后面6个字符。
  • X:大字的X,每按一次删除光标所在位置的前面一个字符。
  • #X:例如,20X 表删除光标所在位置的前面20个字符。
  • dd:删除光标所在行。
  • #dd:例如,6dd表删除从光标所在的该行往下数6行之文字。

复制粘贴

我个人并不是很习惯VI提供的复制粘贴,由于没有高亮选中,用起来感觉不是很方便。平时大都是用的终端工具的复制粘贴功能,因此这里的命令我都加灰了,感兴趣的可以看看。

  • yw:将光标所在处到字尾的字符复制到缓冲区中。
  • p:将缓冲区内的字符粘贴到光标所在位置(指令'yw'与'p必须搭配使用)。
  • yy:复制光标所在行。[超常用]
  • p:复制单行到您想粘贴之处。(指令'yy'与'p'必须搭配使用)
  • #yy:如:6yy表示拷贝从光标所在的该行往下数6行之文字。[常用]
  • p: 复制多行到您想粘贴之处。(指令'#yy'与'p'必须搭配使用)
  • ayy:将复制行放入buffer a, vi提供buffer功能,可将常用的数据存在buffer
  • ap:将放在buffer a的数据粘贴。
  • b3yy:将三行数据存入buffer b。
  • b3p:将存在buffer b的资料粘贴

撤销和重做

撤销和重做在任何编辑器里都是非常有用的命令:

  • u:假如您误操作一个指令,可以马上按u,回复到上一个操作。
  • .: 重复执行上一次的指令

查找和替换

查找和替换的语法笔记复杂,先简单的介绍一下查找的语法:

  • /pattern<Enter> :向下查找pattern匹配字符串
  • ?pattern<Enter> :向上查找pattern匹配字符串

使用了查找命令之后,使用如下两个键快速查找:

  • n:按照同一方向继续查找
  • N:按照反方向查找

至于替换的语法,限于篇幅所限,这里就不介绍了,给一个链接供大家参考一下:http://blog.csdn.net/lanxinju/article/details/5731843。

VI对编程的支持

VI对编程还是提供了一定的支持的。例如,它是支持括号配对、语法高亮显示的。

不过,由于并不支持语法解析功能,作为编码工具和专业的代码编辑器如SourceInsight、VisualStudio等比起来还是有很大差距的。个人感觉做小型项目和临时修改代码用还行,但做大型项目是有点力不从心的。

转载于:https://www.cnblogs.com/TianFang/archive/2013/01/17/2865159.html

Linux编程简介——VI相关推荐

  1. linux编程是否含7,第7章Linux编程简介.ppt

    第7章Linux编程简介 ARM 应用系统设计第7章 Linux编程简介 佘黎煌 东北大学信息科学与工程学院 电子信息工程研究所 嵌入式Linux概况 现在 Linux 广泛用于各类计算应用,不仅包括 ...

  2. Linux编程简介——动态链接库

    传统方式下,库函数的链接是在编译器完成的,所有相关对象在编译的时候被整合成一个可执行文件.与此相比,我们也可以把对库函数的链接载入推迟到程序运行的时期,也就是我们所称作的动态链接. 动态链接的优点 除 ...

  3. linux系统默认的环境变量path,Linux编程 12 (默认shell环境变量, PATH变量重要讲解)...

    一 .概述 默认情况下, bash shell会用一些特定的环境变量来定义系统的环境.这些默认环境变量可以理解是上篇所讲的系统全局环境变量. 1.1 bash  shell支持的Bourne变量 Bo ...

  4. 嵌入式 Linux 编程

    嵌入式 Linux 编程 嵌入式应用开发 嵌入式软件开发流程 什么是交叉编译 在一种平台上编译出能在另一种平台(体系结构不同)上运行的程序: 在PC 平台(X86) 上编译出能运行在ARM平台上的的程 ...

  5. linux系统中vi/vim文本编辑器的使用简介

    linux系统中vi/vim文本编辑器的使用简介 1. vi/vim简介 ​ vi/vim 是linux系统中最基本的编辑器,类似于windows系统中的记事本,几乎所有的linux开发版本都内置了v ...

  6. linux下多进程编程简介

    两年前的文章,拿过来充充门面. ------------------------ linux下多进程编程简介 ( 作者:mikespook | 发布日期:2002-12-8 | 浏览次数:272 ) ...

  7. linux c read函数返回值,Linuxc - GNU Readline 库及编程简介

    GNU Readline 库及编程简介 简介 用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以用来命令补全 ↑ 或 ↓ 键可以用来快速输入历史命令 还有一些交互式行编辑快捷键: ...

  8. 使用.NET Core进行Linux编程3:简介和第2章

    目录 背景 我希望实现的目标 介绍 这本书的封面是什么? 这本书是给谁的? 以应用为中心 这本书不是什么 这本书是什么 GitHub上的所有源代码 DotNet Core MacOS奖金 第2章--进 ...

  9. linux程序设计基础——概述,3.linux程序设计基础—vi使用

    3.linux程序设计基础-vi使用 (24页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 Haubo Training Center L ...

最新文章

  1. linux给用户写任务计划,linux——计划任务
  2. 小卡片遇热就变机器人,不插电就能运动,哈佛加州理工新研究登上Nature子刊...
  3. boost::posix_time模块打印当天的剩余小时数的测试程序
  4. 重力模型matlab代码,STK基础教程.doc
  5. easymock 图片_数据模拟神器 easy-mock 正式开源
  6. 程序员作图工具和技巧,你 get 了么?
  7. PHP模板引擎smarty详细介绍
  8. 豪掷197亿美元!微软收购Siri背后的语音技术研发公司
  9. 那些年,陪你度过最困难时光的女孩还在么?
  10. SQL Server 2008 r2数据库可疑状态解决
  11. 计算机ps如何更改数字,ps数字(ps改数字详细步骤)
  12. Sprite和Texture的区别
  13. 学习Android开发只要这些东西,Android篇
  14. java文件批量下载打包成zip
  15. 36岁大数据人被中台问倒,没点架构思维,连面试都过不了?
  16. Python下的TK(一)概述
  17. 索尼xz Android 内存,下周开更 索尼Xperia XZ1升级安卓9.0
  18. 通过Shell 脚本向CK集群群分发SQL指令
  19. Eric Lippert推荐的C#书单
  20. 参悟yield 和yield from (加精)

热门文章

  1. 安卓BLE开发教程(二) BLE开发流程
  2. Taro+react开发(88):taro条件渲染
  3. [html] 如何给页面添加追加右键菜单(原右键菜单功能保持不变)
  4. [html] iframe框架都有哪些优缺点?
  5. [css]怎么改变选中文本的文字颜色和背景色?
  6. [vue-element] ElementUI表格组件如何实现动态表头?
  7. 前端学习(2820):全局文件tabber字段
  8. 工作252:uniapp--实战--uview---tabber
  9. 工作241:判断数组里面是否有某个值
  10. 前端学习(2501):动态绑定样式