Linux编程简介——VI

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,而是hjkl,分别控制光标左、下、上、右移一格,分别分布在右手四个指头,新手需要一段时间来适应。使用非常频繁,需要熟练掌握。

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

  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xamarin android 标签,安卓端Tabbedpage调整在底部位置和标签及取消Android API28 以下的点击特效—-xamarin.forms学习笔记(一)...

使用tabbedpage时将安卓端导航放在底部,官网也有说明方法.总结:xmlns"http://xamarin.com/schemas/2014/forms"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:local"clr-namespace:aya"x:Class"aya.MainPage"xmlns:and…

算法之递推及其应用(递推关系的建立及在信息学竞赛中的应用 安徽 高寒蕊)...

定义&#xff1a;给定一个数的序列H0,H1,…,Hn,…若存在整数n0&#xff0c;使当nn0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hn(0i<n)联系起来&#xff0c;这样的式子就叫做递推关系。 递推关系中存在着三大基本问题&#xff1a;如何建立递推关系&#xff0c;已…

android广播第三方库,Android Support 库:LocalBroadcastManager

在介绍完 Android Support 库发展历程(http://blog.chengyunfeng.com/?p1047)后&#xff0c; 再分别介绍下 Android Support 库中有用但是被忽略的一些功能。了解这些功能&#xff0c;在需要的时候可以避免在引入其他类似的第三方库或者避免自己重复制造轮子&#xff0c;提高开…

2012年总结

2012年是一个特别的年头。 这一年&#xff0c;我的准研究生生活和研究生生活加起来已经一年了。最近在进行期末考试&#xff0c;自己也对自己这一年的经历进行一下总结&#xff0c;留在研一结束的时候对照一下。 自己在保研的时候不是很顺利&#xff08;主要是能力不足&#xf…

android 7调用摄像头,Android调用摄像头拍照(兼容7.0)

【实例简介】Android调用摄像头拍照(兼容7.0)Demo&#xff0c;原博客文章https://blog.csdn.net/u010356768/article/details/70808162【实例截图】【核心代码】4dc3b10b-51e5-4d8e-aff6-806753f897c7└── Camera├── app│ ├── app.iml│ ├── build.gradle│ …

字符串拼接成insert语句[简单记录]

1. 001,自吸过滤式防颗粒物呼吸器,,False,1,0,,False,,001001,随弃式面罩,,False,2,,,False,,001002,可更换式半面罩,,False,2,,,False,,001003,可更换式全面罩,,False,2,,,False,,001001001,有呼气阀,,False,3,,,,, 生成下面这种格式 insert into base_productclass2 values(0…

没有android:padding属性,android自定义无上下padding的textview

因为工作需要需要无上下padding的textview&#xff0c;经过查阅资料&#xff0c;很多说xml中的配置includefontpaddingfalse&#xff0c;但无法实现0 padding的需要。也有说通过设置负数的marginTop实现&#xff0c;但是不同字体&#xff0c;需要设置的值不同(因为自带的paddin…

判断iframe是否加载完成的方法[转]

原文&#xff1a;http://www.planabc.net/2009/09/22/iframe_onload/ javascript code&#xff1a; 1 var iframe document.createElement("iframe");2 iframe.src "http://www.planabc.net";3 4 if (iframe.attachEvent){5 iframe.attachEvent(&quo…

科技论文的时态问题

如何在科技论文中使用时态英语谓语动词时态共有16种&#xff0c;在英文科技论文中用得较为频繁的主要有三种&#xff1a;即一般现在时、一般过去时和将来时。正确地使用动词时态是科研写作的基本功&#xff0c;我们在撰写英文论文时&#xff0c;如不能正确选用时态&#xff0c;…

android 卡片放大变详情页,ConstraintLayout动画实现布局卡片式滑动放大缩放

ConstraintLayout(约束布局)是Android Studio 2.2中主要的新增功能之一&#xff0c;Android studio升级到2.3版本之后&#xff0c;不管是新建Activity或fragment&#xff0c;xml默认布局由RelativeLayout更改为ConstraintLayout了。按照以往惯例先上效果图&#xff1a;GIF.gif上…

开源路由软件zebra的命令存储原理及使用方法

ZZ FROM: http://www.cnblogs.com/iTsihang/archive/2012/12/05/2783252.html zebra在设计命令格式的时候&#xff0c;将命令节点Node和命令Command分开&#xff0c;整个命令结构是一个树状的,如图&#xff1a; NODEn表示命令节点&#xff0c;CMDn表示具体的命令。在zebra的整…

html文本框样式大全,HTML文本框样式大全

输入框景背景透明&#xff1a;鼠标划过输入框&#xff0c;输入框背景色变色&#xff1a;style"width: 106; height: 21"οnmοuseοut"this.style.borderColorblack;this.style.backgroundColor#ffffff" style"border-width:1px;border-colorblack&qu…

和菜鸟一起深入学习国嵌实验之简单Makefile

1、首先是待make的程序&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int main(void) {printf("Hello Makefile!\n");return 0; }2、其次就是其makefile了&#xff1a; CC $(CROSS_COM…

网易邮箱写邮件HTML转换按钮,网易邮箱推出虚拟场景写信功能 身临其境写邮件...

当你用电子邮件给好友发出问候时&#xff0c;是否怀念着曾经繁茂成荫、绿野同行的过往&#xff1f;当你给他(她)写信表达思念时&#xff0c;是否憧憬着秋风初起、阳光清透的意境&#xff1f;近期&#xff0c;网易邮箱独家推出“虚拟场景写信”功能&#xff0c;可以帮助用户在写…

2013年的目标

1 精通c#在clr中的运行机制【没有完成】 2 精通oralce数据库【没有完成】 3 学习java的开发。【没有完成】 4 精通业务系统&#xff0c;主要是流程&#xff0c;以及凭证的要求。【完成一半】 5 精通一种c#的开源框架 csla.net【没有完成】 6 精通办公软件的使用 office excel p…

批量下载baidu音乐主页的歌曲

[代码] 华语 package com;import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.Input http://www.fpzhuhai.com/linked/20130207.do; Stream; i…