Linux 笔记 - 第七章 Vi 和 Vim 编辑器
一、前言
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 编辑器的更多相关文章
- 鸟哥的linux私房菜——第九章学习(vim编辑器)
第九章vim编辑器 1.0).vi与vim Linux下文本界面的文书编辑器通常会有常常听到的就有: emacs, pico, nano, joe, 与 vim 等等. vi的优势: 所有的 Unix ...
- Android群英传笔记——第七章:Android动画机制和使用技巧
Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...
- Linux 入门记录:五、vi、vim 编辑器
一.vi.vim编辑器 vi 是一个命令行界面下的文本编辑工具,最早在 1976 年由 Bill Joy 开发.当时名字叫做 ex.vi 支持绝大多数操作系统(最早在类 Unix 操作系统的 BSD上 ...
- Linux学习之十三-vi和vim编辑器及其快捷键
vi和vim编辑器及其快捷键 1.vi与vim区别 它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. vim的这些优势主要体现在以下几个方 ...
- JVM学习笔记-第七章-虚拟机类加载机制
JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...
- Linux系统vi或者vim编辑器中如何显示行号
设置行号很简单 我们要到vi或者vim编辑器的命令模式下,输入set number :set number 按下回车就显示行号了 那么怎么关闭行号呢? 很简单,我们只要再到vi或者vim编辑器的命令模 ...
- vi与vim编辑器与解决vim编辑异常
目录 一:vi与vim编辑器 二:解决vim编辑异常 一:vi与vim编辑器 vim是vi的升级版编辑器,就是vim比vi丰富一些. 1.安装vim 命令 yum install vim -y 2.打 ...
- linux学习笔记--vi与vim编辑器
vi编辑器全名为Visual Interface,即为可视化接口,类似于Windows中的记事本 vim相当于是vi的一个升级版本,包含vi的一切操作命令,vim相对于vi做了哪些提升: 1.vim支 ...
- linux的vi和vim编辑器操作
vi:linux内部的文本编辑器:vim:vi的增强版,具有程序编辑的能力. vi和vim的三种常见模式: (1)正常模式(一般模式):vim一打开就是这种模式,此模式下可以使用各种快捷键,比如复制粘 ...
随机推荐
- [ZJOI2011]看电影(组合数学,高精度)
[ZJOI2011]看电影 这题模型转化很巧妙.(神仙题) 对于这种题首先肯定知道答案就是合法方案除以总方案. 总方案显然是\(k^n\). 那么考虑怎么算合法方案. 当\(n>k\)的时候显然 ...
- Guava google缓存机制
易百教程java学习http://www.yiibai.com/v3.php?app=all
- netty无缝切换rabbitmq、activemq、rocketmq实现聊天室单聊、群聊功能
netty的pipeline处理链上的handler:需要IdleStateHandler心跳检测channel是否有效,以及处理登录认证的UserAuthHandler和消息处理MessageHan ...
- Docker学习总结(三)--常用命令
镜像相关命令 查看镜像 docker images 返回列表字段含义如下: 字段名称 字段含义 REPOSITORY 镜像名称 TAG 镜像标签 IMAGE ID 镜像 ID CREATED 镜像创建 ...
- 变量、常量、input、if语句
Chapter2 Python基础 2.1 变量命名规则 字母.数字.下划线组成 不能数字开头 不能使用python中的关键字 变量名具有意义 推荐驼峰(ArvinGood).或者下划线方式 (arv ...
- HDU 1847
题意略. 思路:又忘了dp,搜索这种暴力方法了.... #include<bits/stdc++.h> using namespace std; ; bool sg[maxn]; int ...
- JVM知识点总结
JVM总体梳理 一.jvm体系总体概览 JVM体系总体分四大块:类的加载机制.jvm内存结构.GC算法 垃圾回收.GC分析 命令调优 这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点 ...
- Python--编码与字符串
为什么字符串要编码呢? 因为计算机只能处理数字,最底层的CPU只能识别0和1.所以字符串就需要编码成对应的数字. 在计算机中,最开始只有ASCII,我们开始接触计算机编程时就学了ASCII码.最早只有 ...
- JavaScript Array 数组方法汇总
JavaScript Array 数组方法汇总 1. arr.push() 从后面添加元素,返回值为添加完后的数组的长度 var arr = [1,2,3,4,5] console.log(arr.p ...
- Joda学习笔记
Joda Time简介 日常业务开发中,经常需要处理日期.比如:获取当前一个月之内的开播记录,获取十分钟之内的红包记录等等.我们之前是用java.util.Calendar实现的,直到我看到占小 ...