博客地址:http://www.moonxy.com

一、前言

Vi 与 Vim 都是多模式编辑器,是 Linux 中必不可少的工具。不同的是 Vim 是 Vi 的升级版本,它不仅兼容 Vi 的所有命令,Vi 使用于文本编辑,但是 Vim 更适用于 Coding。不仅如此,Vim 还有一些新的特性在里面。
Vim 的这些优势主要体现在以下几个方面:
1、多级撤消:我们知道在 vi 里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。
2、易用性:Vi 只能运行于 Unix中,而 Vim 不仅可以运行于 Unix,Windows,Mac 等多操作平台。
3、语法加亮:Vim 可以用不同的颜色来加亮你的代码。
4、可视化操作:就是说 Vim 不仅可以在终端运行,也可以运行于 X Window、 Mac OS、 Windows。
5、对 Vi 的完全兼容:某些情况下,你可以把 Vim 当成 Vi 来使用。

二、三种模式

Vi 和 Vim 都有 3 种模式,分别为:一般模式、编辑模式、命令模式。

2.1 一般模式

该模式可以移动光标、删除字符等。
使用 vim filename 编辑一个文件时,默认进入该文件的一般模式,如果还没有安装 Vim,则可以使用 yum 先安装:[root@ryan ~]# yum install -y vim-enhanced

一般模式 - 移动光标

h 或向左方向键(←):光标"向左"移动一个字符;
j 或向下方向键(↓):光标"向下"移动一个字符;
k 或向上方向键(↑):光标"向上"移动一个字符;
l 或向右方向键(→):光标"向右"移动一个字符;
[Ctrl]+[f]或者[Page Down] 按键:屏幕"向下"移动一页;
[Ctrl]+[b]或者[Page Up] 按键:屏幕"向上"移动一页;
[Ctrl]+[d]:屏幕"向下"移动半页;
[Ctrl]+[u]:屏幕"向上"移动半页;
0 或者 Shift+6:数字"0",移动到本行的行首(常用);
Shift+4:移动到本行行尾(常用);
gg:移动到这个文件的首行,相当于 1G(常用);
G:移动到这个文件的最后一行(常用,先按 Capse Lock 切换到大写,然后再按字母 G);
nG:n 为任意数字。移动到这个文件的第 n 行。例如 20G 则会移动到这个文件的第 20 行(常用,可配合显示行号 :set nu);
n<Enter>:n 为数字,然后按回车键,光标向下移动 n 行;

一般模式 - 删除、复制与粘贴

x,X:在一行字中,x 为向后删除一个字符(相当于 [Del] 按键),X 为向前删除一个字符(常用,相当于 [backspace] 即退格键);
nx:n 为数字,连续向后删除n个字符。举例来说,要连续删除10个字符,则输入"10x";
dd:删除/剪切光标所在的那一整行(常用);
ndd:n 为数字。从光标位置开始,向下删除/剪切 n 行,例如 20dd 则是从光标行开始向下删除/剪切20行(常用);
d1G:删除光标所在位置到第一行的所有数据;
dG:删除光标所在位置到最后一行的所有数据;
d$:删除光标所在位置到该行的最后一个字符;
d0:d 的后面是数字0,删除光标所在处,到该行的最前面一个字符;
yy:复制光标所在的那一行(常用);
nyy:n为数字。复制光标所在的向下n行,例如 20yy 则是复制 20 行(常用);
y1G;复制光标所在行到第一行的所有数据;
yG;复制光标所在行到最后一行的所有数据;
y0:复制光标所在的那个字符到该行行首的所有数据;
y$:复制光标所在的那个字符到该行行尾的所有数据;
p,P:p 为将已复制的数据粘贴到光标的下一行,P 则为贴在光标上一行。举例来说,当前光标在第20行,且已经复制了10行数据。则按下 p 后,那10行数据会贴在原来的20行之后,即由21行开始贴。但如果是按下 P,那么原来的第20行会被变成30行(常用);
J:将光标所在行与下一行的数据结合成同一行;
c:重复删除多个数据,例如向下删除10行,[10cj];
v:按 v 后移动光标会选中指定字符,然后可以实现复制、粘贴等操作;
y:复制选中的字符;
.:这是小数点,意思是重复前一个动作。如果想重复删除、重复粘贴,按下小数点"."就可以;
u:复原前一个操作(常用);
[Ctrl]+r:重做上一个操作(常用);
u 与 [Ctrl]+r 是很常用的命令。一个是复原,另一个则是重做一次。利用这两个功能按键,编辑起来就得心应手。

2.2 编辑模式

在此模式下可以输入字符,按 ESC 键将回到一般模式。 
一般模式下不可以修改某一个字符,如果要修改字符,只能进入编辑模式,从一般模式进入编辑模式,只需按 i、I、a、A、o、O、r 或 R 中的任何一个键即可。进入编辑模式后,在屏幕左下方会显示"-- INSERT --"或"-- REPLACE --"提示,从编辑模式回到一般模式时,只需要按 Esc 键即可。
i、I
插入:在当前光标所在处插入输入文字,已存在的文字会向后退;其中,i 为"从当前光标所在处插入",I 为"在当前所在行的第一个非空格符处开始插入"(常用);
a、A
a 为"从当前光标所在的下一个字符处开始插入",A 为"从光标所在行的最后一个字符处开始插入"(常用);
o、O
这是英文字母 o 的大小写。o 为"在当前光标所在的下一行处插入新的一行";O 为"在当前光标所在处的上一行插入新的一行"(常用);
r、R
替换:r 会替换光标所在的那一个字符;R 会一直替换光标所在的文字,直到按下 ESC 键为止;
使用上面这些按键时,在vi画面的左下角处会出现"--INSERT--"或"--REPLACE--"的字样。通过名称就知道是什么操作。特别注意,上面也提过了,想在文件中输入字符时,一定要在左下角处看到 INSERT/REPLACE 才能输入。

2.3 命令模式

该模式可以实现保存文件、退出 Vi、设置 Vi、查找、替换等操作。 
在一般模式下,输入 ":" 或者 "/" 即可进入命令模式。在该模式下,我们可以搜索某个字符或者字符串,也可以实现保存、替换、退出、显示行号等操作。
/word
从光标位置开始,向下寻找一个名为 word 的字符串。例如要在文件内搜索 word 这个字符串,就输入 /word 即可(常用);
?word
从光标位置开始,向上寻找一个名为 word 的字符串;
n
n 是小写英文字母。表示"重复前一个搜索的动作"。举例来说,如果刚刚执行 /word 去向下搜索 word 字符串,则按下 n 后,会向下继续搜索下一个名称为 word 的字符串。如果是执行 ?word 的话,那么按下 n,则会向上继续搜索名称为 word 的字符串;
N
N 是大写英文字母。与 n 刚好相反,为"反向"进行前一个搜索操作。例如 /word 后,按下N则表示"向上"搜索 word;
:n1,n2s/word1/word2/g
n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串替换为 word2。举例来说,在 100 到 200 行之间搜索 word1 并替换为 word2,如果不加 g 则只替换每行的第一个 word1,如:":100,200s/word1/word2/g"(常用);
:1,$s/word1/word2/g
从第一行到最后一行寻找 word1 字符串,并将该字符串替换为 word2(常用);
:1,$s/word1/word2/gc
从第一行到最后一行寻找 word1 字符串,并将该字符串替换为 word2。且在替换前显示提示符给用户确认(conform)是否需要替换(常用);
:w
将编辑的数据写入硬盘文件中保存,但不离开;
:w!
若文件属性为"只读"时,强制写入该文件。不过,到底能不能写入,与文件权限有关;
:q
离开 vi;
:q!
若曾修改过文件,又不想存储,使用 ! 为强制离开不存储文件;注意一下,那个感叹号(!)在 vi 当中,常常具有"强制"的意思(常用);
:wq
存储后离开,若为 :wq! 则为强制存储后离开(常用);
:e!
将文件还原到最原始的状态;
ZZ
若文件没有更改,则不存储离开,若文件已经更改,则存储后离开;
:w [filename]
将编辑的数据存储成另一个文件(类似另存新文件);
:r [filename]
在编辑的数据中,读入另一个文件的数据。即将"filename"这个文件内容加到光标所在行的后面;
:n1,n2 w [filename]
将 n1 到 n2 行的内容存储成 filename 文件;
:! command
暂时离开 vi 到命令行模式下执行 command 的显示结果。例如":! ls /home",即可在vi中查看 /home 中以 ls 输出的文件信息;
:set nu
显示行号,设置之后,会在每一行的前缀显示该行的行号;
:set nonu
与 set nu 相反,为不显示行号;
注意,在 vi 中,"数字"是很有意义的。数字通常表示重复做几次的意思。也有可能表示要去哪里的意思。举例来说,要删除 50 行,则是用"50dd"。数字加在动作之前。要向下移动20行,使用"20j"或者"20↓"即可。

Linux 笔记 - 第七章 Vi 和 Vim 编辑器的更多相关文章

  1. 鸟哥的linux私房菜——第九章学习(vim编辑器)

    第九章vim编辑器 1.0).vi与vim Linux下文本界面的文书编辑器通常会有常常听到的就有: emacs, pico, nano, joe, 与 vim 等等. vi的优势: 所有的 Unix ...

  2. Android群英传笔记——第七章:Android动画机制和使用技巧

    Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...

  3. Linux 入门记录:五、vi、vim 编辑器

    一.vi.vim编辑器 vi 是一个命令行界面下的文本编辑工具,最早在 1976 年由 Bill Joy 开发.当时名字叫做 ex.vi 支持绝大多数操作系统(最早在类 Unix 操作系统的 BSD上 ...

  4. Linux学习之十三-vi和vim编辑器及其快捷键

    vi和vim编辑器及其快捷键 1.vi与vim区别 它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. vim的这些优势主要体现在以下几个方 ...

  5. JVM学习笔记-第七章-虚拟机类加载机制

    JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...

  6. Linux系统vi或者vim编辑器中如何显示行号

    设置行号很简单 我们要到vi或者vim编辑器的命令模式下,输入set number :set number 按下回车就显示行号了 那么怎么关闭行号呢? 很简单,我们只要再到vi或者vim编辑器的命令模 ...

  7. vi与vim编辑器与解决vim编辑异常

    目录 一:vi与vim编辑器 二:解决vim编辑异常 一:vi与vim编辑器 vim是vi的升级版编辑器,就是vim比vi丰富一些. 1.安装vim 命令 yum install vim -y 2.打 ...

  8. linux学习笔记--vi与vim编辑器

    vi编辑器全名为Visual Interface,即为可视化接口,类似于Windows中的记事本 vim相当于是vi的一个升级版本,包含vi的一切操作命令,vim相对于vi做了哪些提升: 1.vim支 ...

  9. linux的vi和vim编辑器操作

    vi:linux内部的文本编辑器:vim:vi的增强版,具有程序编辑的能力. vi和vim的三种常见模式: (1)正常模式(一般模式):vim一打开就是这种模式,此模式下可以使用各种快捷键,比如复制粘 ...

随机推荐

  1. [ZJOI2011]看电影(组合数学,高精度)

    [ZJOI2011]看电影 这题模型转化很巧妙.(神仙题) 对于这种题首先肯定知道答案就是合法方案除以总方案. 总方案显然是\(k^n\). 那么考虑怎么算合法方案. 当\(n>k\)的时候显然 ...

  2. Guava google缓存机制

    易百教程java学习http://www.yiibai.com/v3.php?app=all

  3. netty无缝切换rabbitmq、activemq、rocketmq实现聊天室单聊、群聊功能

    netty的pipeline处理链上的handler:需要IdleStateHandler心跳检测channel是否有效,以及处理登录认证的UserAuthHandler和消息处理MessageHan ...

  4. Docker学习总结(三)--常用命令

    镜像相关命令 查看镜像 docker images 返回列表字段含义如下: 字段名称 字段含义 REPOSITORY 镜像名称 TAG 镜像标签 IMAGE ID 镜像 ID CREATED 镜像创建 ...

  5. 变量、常量、input、if语句

    Chapter2 Python基础 2.1 变量命名规则 字母.数字.下划线组成 不能数字开头 不能使用python中的关键字 变量名具有意义 推荐驼峰(ArvinGood).或者下划线方式 (arv ...

  6. HDU 1847

    题意略. 思路:又忘了dp,搜索这种暴力方法了.... #include<bits/stdc++.h> using namespace std; ; bool sg[maxn]; int ...

  7. JVM知识点总结

    JVM总体梳理 一.jvm体系总体概览 JVM体系总体分四大块:类的加载机制.jvm内存结构.GC算法 垃圾回收.GC分析 命令调优 这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点 ...

  8. Python--编码与字符串

    为什么字符串要编码呢? 因为计算机只能处理数字,最底层的CPU只能识别0和1.所以字符串就需要编码成对应的数字. 在计算机中,最开始只有ASCII,我们开始接触计算机编程时就学了ASCII码.最早只有 ...

  9. JavaScript Array 数组方法汇总

    JavaScript Array 数组方法汇总 1. arr.push() 从后面添加元素,返回值为添加完后的数组的长度 var arr = [1,2,3,4,5] console.log(arr.p ...

  10. Joda学习笔记

       Joda Time简介 日常业务开发中,经常需要处理日期.比如:获取当前一个月之内的开播记录,获取十分钟之内的红包记录等等.我们之前是用java.util.Calendar实现的,直到我看到占小 ...