vi是Unix世界里极为普遍的全屏幕文本编辑器,vim是它的改进版本Vi IMproved的简称。几乎可以说任何一台Unix机器都会提供这套软件。

只要简单的在Shell下执行vi就可以进入 vi 的编辑环境。在实际操作之前先对它有个了解会比较好。

vi 有两种模式,输入模式以及指令模式。输入模式即是用来输入文字资料,而指令模式则是用来下达一些编排文件、存档、以及离开 vi 等等的操作指令。当执行 vi 后,会先进入指令模式,此时输入的任何字元都视为指令。

第一步:

1、文本编译工具vi使用

vi的名字取自于visual,意为“直观”,它是一个全屏幕编辑程序。还有gedit、emacs在Linux系统中vi是最常用的编辑程序,它的文本编辑功能十分强大,但使用起来比较复杂。

2、Linux系统中的vi其实是vim,是vi的增强版。vi编辑程序有两种工作模式:

命令模式(指令模式):此模式下的按键当作指令来处理。

输入模式:此模式的按键作为真正的输入。

第二步:

vi操作模式的切换,要进入输入模式,可以按如下命令键:

新增:‘a’,从光标后开始输入文本。‘A’,从光标所在行末尾输入新的文本。

插入:‘i’,从光标前开始插入文本。‘I’,从光标行的第一个非空格字符前开始插入文本。

开始:‘o’,从光标所在行下新增一行并进入输入模式。‘O’,从光标所在行上新增一行并进入输入模式。

第三步:

从输入模式按ESC进入命令模式

第四步:

进入和退出vi

进入vi,在提示符下:

vi

vi 文件名

退出vi,在指令模式下:

:q,退出

:wq,存盘后退出

:q!,不存盘强制退出

:x,强制存盘退出

第五步:

删除和修改文本

指令模式下:

x:删除光标处的一个字符

dd:删除光标所在行

r:修改光标所在字符

R:进入改写状态

s:删除光标所在字符,并进入输入状态

S:删除光标所在行,并进入输入状态

第六步:

光标移动

1、指令模式下:

h:向左移动一列

j 或+:向下移动一行

k 或-:向上移动一行

l:向右移动一列

组合:nh,nj,nk,nl。分别是移动n行(列)

在有方向键的键盘上,无论指令模式或输入模式都可以用方向箭头来移动光标

2、光标按行移动

指令模式下:

:n回车:将光标移动到第n行

:$回车或者L:将光标移动到最后一行

M:将光标移动到中间一行

H:将光标移动到第一行

:set number:显示行号

:set nonumber:取消显示行号

3、光标按单词移动

指令模式下:

w:将光标移动到下一个单词头

b:将光标移动到前一个单词头

e:将光标移动到下一个单词尾

组合:nw、nb、ne

4、光标按字符移动

指令模式下:

$:将光标移动到当前行尾

^或0:将光标移动到当前行首

n|:将光标移动到当前行的第n个字符

fm:将光标移动到当前行的下一个字符m处

光标返回原处

两个单引号‘’

第七步:

文本编辑

1、翻页

指令模式下:

Ctrl+d:下翻半屏

Ctrl+u:上翻半屏

Ctrl+f:下翻一屏

Ctrl+b:上翻一屏

2、查找

指令模式下:

/string:从当前位置向前查找字符串string

?string:从当前位置向后查找字符串string

继续查找:

n:沿前述查找方向继续查找同一字符串

N:沿前述查找方向的反方向继续查找同一字符串

3、删除文本

指令模式下:

x:删除字符

dw:删除单词

dd:删除行

D:删除从光标到行末所有字符

dfm:删除从光标到第一个字符m间的文本

:5d:删除第5行

:5,$d:删除从第5行到最后一行

可以和整数n组合

4、撤销和重复命令

指令模式下:

u:撤销最后一个更改操作

U:撤销对本行的所有修改

5、文本替换

指令模式下:

m:替换当前字符为m,替换后仍为命令模式

R:替换当前字符后的一系列字符,替换后变为输入模式。

s:多个字符替换单个字符

cw:单词替换

cc:行替换

C:替换当前行剩余部分

cfm:替换当前字符到指定的字符m

6、文本删除与替换对比

命令类型           删除           替换

字符                 x                r

单词               dw             cw

行                  dd              cc

从光标到行尾         D               C

从光标到字符m     dfm           cfm

7、全局替换

指令模式下:

搜索当前行的第一个实例

:s/bash/sch把当前行的第一个bash换为sch

搜索指定行的第一个实例

:1,10s/bash/sch 把1到10行bash换为sch

:5,$s/bash/sch 把5到末行bash换为sch

设置过滤条件进行搜索

:g/var/s/bash/sch把包含var行中的bash替换为sch

同一行中替换所有实例

:s/bash/sch/g把当前行中所有bash替换为sch

替换整个文件中的所有实例

:1,$s/bash/sch/g把整个文件中的bash替换为sch

8、移动和复制文本

指令模式下:

yy:复制当前行

dd:剪切当前行(删除)

p、P:粘贴当前行

9、复制和移动文本块

指令模式下:

把某(几)行复制并粘贴到某行后

:5 copy8 把5行复制并粘贴到第8行后

:1,5 copy$ 把1-5行复制并粘贴到末行后

:.,$ copy0 把当前行到末行复制并粘贴到文件头

把copy改为move即为移动文本块(注:.表示当前行,0表示文件头,$表示文件尾)

第八步:

文件保存

指令模式下:

:w 保存文件

:wq或者:x或者ZZ 保存并退出vi,返回linux提示符

:w f1.c 把当前文件另存为f1.c

:q! 放弃对文件的保存,直接退出

1、保存文本块

指令模式下:

:2,5 write f2 把第2到第5行另存为文件f2

保存文本块,并直接覆盖掉已有(如果有)文件

:2 write! f2 把第2行强行另存为文件f2

向文件追加文本

:2 write >> f2 把第2行追加到文件f2末尾

第九步:

与shell交互

指令模式下:

读某文件的内容到当前打开文件

:5 read a 把文件a中的内容读到当前打开文件的第5行后

在vi中执行shell命令

:!pwd

在vi中执行shell命令,并把结果添加到vi中

:5 read! pwd把pwd执行结果插入到第5行后

:e 在vi中编辑某文件时,不退出vi而建立新文件

:n 在vi中编辑某文件时,不退出vi而加载新文件

Linux系统中的vi/vim指令【详解】的更多相关文章

  1. linux系统的任务计划crontab使用详解

    linux系统的任务计划crontab使用详解 其实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了. 关于cron任务计划 ...

  2. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  3. Linux系统下权限管理和命令详解

    下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...

  4. nginx.conf中关于nginx-rtmp-module配置指令详解

    译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...

  5. linux内核中send与recv函数详解

    Linux send与recv函数详解 1.简介 #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t n ...

  6. 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)

    一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)     概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...

  7. Linux系统中用户组、文件权限浅解

    用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在Linux中每个文件有所有者.所在组.其它组的概念. [所有者] 一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者,用& ...

  8. linux系统下的rz、sz详解

    对于linux服务器来说,通常我们是通过一些ssh工具进行远程访问连接的,而对于经常使用它的人来说,少不了将文件上传下载到服务器.如何能够快速的同服务器进行文件的交互尤为重要.不然每次都打开单独的ss ...

  9. Linux—vi/vim命令详解

    如何在 vi 里搜索关键字 在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 "/" 然后输入你要查找的关键字敲回车就行了. 如果你要继续查找此关键字,敲字符 ...

随机推荐

  1. Java中避免空指针的几个方法

    equals Object类中的equals 方法在非空对象引用上实现相等关系,具有对称性 x.equals(y) 和 y.equals(x) 结果是一样的,但当x == null时会抛出空指针异常 ...

  2. JDBC连接数据库方法的封装,以及查询数据方法的封装

    (在上一篇文章中,我们详细的介绍了连接数据库的方法,以及eclipse操作数据库信息的相关方法,在这里我们将主要讲封装.) 主要内容: 一般的连接数据库测试 把连接数据库的方法封装成一个类和测试 一个 ...

  3. Data truncation: Out of range value for column 'id' at row 1 ### The

    org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: com.mys ...

  4. wcf 访问控制

    public class PasswordDigestChannelFactory<TPortTypeClient, TPlugin> where TPortTypeClient : Cl ...

  5. ZT Abstract Factory

    实际上,Abstract Factory 模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而 Factory 模式正如我在相应的文档中分析的是为一类对象提供创建接口或延迟对象的创建到子类中实现 ...

  6. 安装ale_python_interface时遇到make错误

    1. 首先按照https://pypi.org/project/ale-python-interface/0.0.1/来安装,直接python3 -m pip 但提示缺少一个头文件ale_c_wrap ...

  7. posix进程间的通信

    1.无名管道 1.1管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: 只能用于父子进程或者兄弟进程之间( ...

  8. C#图解教程读书笔记(第4章 类:基础)

    类成员包括数据成员和函数成员. 和C/C++不同,C#在类型的外部不能声明全局变量,所有的字段都属于类型,而且必须在类型声明内部声明. 和C/C++不同,方法没有返回默认类型,所有方法必须包含返回类型 ...

  9. python 获取某个月的全部日期

    import calendar print range(calendar.monthrange(year, month)[1]+1)[1:]

  10. chromedriver链接

    http://npm.taobao.org/mirrors/chromedriver/