Linux高级编程--01.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,而是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等比起来还是有很大差距的。个人感觉做小型项目和临时修改代码用还行,但做大型项目是有点力不从心的。

来自为知笔记(Wiz)

时间: 2024-08-08 18:41:17

Linux高级编程--01.vi命令的相关文章

linux高级编程补充知识

F: 计算机系统结构: ------------------------------- 应用程序 ----------------- |  库函数 ------------------------------- 系统调用 ------------------------------- 虚拟文件系统  |    进程模块 -(文件模块)-|   进程间通信 设备文件     | ------------------------------- 硬 件 ------------------------

linux修改文件内容 vi命令

vi编辑器是所有Unix及Linux系统下标准的编辑器,介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它.Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻. 在所有的命令执行前,先按Esc1.vi的基本概念  基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功

Linux——高级编程之概要

1.为什么要学习Linux下的高级编程 应用课程的学习,不知道Linux内核的强大功能 Linux下的高级编程课程学习:感知到内核的存在,内核的强大功能 文件管理 进程管理 设备管理 内存管理 网络管理 2.怎么样学习Linux下的高级编程 Linux下高级编程的特点:涉及到内核向用户空间提供的接口(函数) 3.为什么内核要提供这些接口呢 主要原因: A:内核要为应用程序服务,应用程序如果没有内核服务,则功能非常单一 B:内核是一个稳定的代码,同时也要为多个用户空间的程序服务,为了防止用户空间的

Linux高级编程--02.gcc和动态库

在Linux环境下,我们通常用gcc将C代码编译成可执行文件,如下就是一个简单的例子: 小实验:hello.c #include <stdlib.h> #include <stdio.h> void main(void) { printf("hello world!\r\n"); } 可以通过如下指令来编译出一个可执行文件: gcc hello.c 执行完该命令后,就会得到一个a.out的可执行文件. 编译的过程 前面的例子只是简单的介绍了一下gcc的使用方法,

Linux Shell编程 - 字符截取命令

01.字段提取命令 cut  =>   cut [选项] 文件名 -f 列号: 提取第几列 -d 分隔符:按照指定分割符分割列 例如:cut  -f  2,4(列号:,逗号可以多行提取)  student.txt cut  -d “:” -f 1,3 /etc/passwd 02.格式化输出命令 printf 命令  => printf  ‘输出类型输出格式’  输出内容 输出类型: %ns:输出字符串.n 是数字指代输出几个字符 %ni:输出整数.n 是数字指代输出几个数字 %m.nf:输出

Linux高级编程--03.make和makfile

Makefile语法基础 在Linux下,自动化编译工具是通过make命令来完成的(一些工具厂商也提供了它们自己的make命令,如gmake等),make命令的基本格式如下: make [-f makefile] [label] 它可以通过-f参数指定输入文件,当省略-f参数时,默认输入文件名为Makefile,由于我们通常不用这个-f参数,往往就用默认的Makefile文件名. Makefile是一个文本文件,它是基于一定的语法规则的,它的基本执行规则定义如下: target : [prere

Linux高级编程--06.进程概述

进程控制块 在Linux中,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,它通常包含如下信息: 进程id.系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数. 进程的状态,有运行.挂起.停止.僵尸等状态. 进程切换时需要保存和恢复的一些CPU寄存器. 描述虚拟地址空间的信息. 描述控制终端的信息. 当前工作目录(Current Working Directory). umask掩码. 文件描述符表,包含很多指向file结构体的指针. 和信号相关的

Linux高级编程--11.信号

基本概念 信号在Linux中是一个比较常见的概念,例如我们按Ctrl+C中断前台进程,通过Kill命令结束进程都是通过信号实现的.下面就以Ctrl+C为例简单的说明信号的处理流程: 用户按下Ctrl-C,这个键盘输入产生一个硬件中断. 该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断. 终端驱动程序将Ctrl-C解释成一个SIGINT信号,记在该进程的PCB中(也可以说发送了一个SIGINT信号给该进程). 当内核返回到该进程的用户空间代码继续执行之前,首先处理PCB中记录的

Linux高级编程--04.GDB调试程序(查看数据)

查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用GDB命令来查看当前的栈中的信息. 下面是一些查看函数调用栈信息的GDB命令: backtrace / bt :打印当前的函数调用栈的所有信息.如: (gdb) bt #0 func (n=250) at tst.c:6 #1 0x08048524 in main (argc=1, argv=0xbffff6