《Linux系统》之"皮毛系列"(八)Vim/Vi的简介及使用

一、Vim/Vi的简介

1、为什么要学习Vim/Vi

世界上的文本编辑器(含代码编辑器)的种类多不胜数,他们各有各的优点,在功能设计上也很强大,可视化界面上也越做越好看,既然有那么多的编辑器,我们为什么还要学习Vim/Vi呢。我来说一下原因:

1、所有的类Unix系统,都自带vi 文本编辑器
2、很多应用程序的编辑界面都会主动呼唤 vi编辑器 
3、vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
4、操作简单,编辑速度快。

这回知道为什么要学习Vim/Vi了吧。其实主要原因是第二点,因为在Linux系统中有太多的指令都预设使用 vi 作为文本编辑的界面,所以你必须、一定要学会 vi ,否则很多指令你根本就无法操作。

2、Vi与Vim的关系

Vi是一个功能强大的全屏幕文本编辑器,是Linux/Unix上最常用的多模式文本编辑器,它可以建立、编辑和显示文本等操作。Vi编辑界面上,没有菜单,可以通过多种指令进行快速编辑。

Vim可以理解为是Vi的升级版,它兼容了Vi的所有指令,同时还提供了额外的优越特性:

  • 支持语法高亮显示,同时支持多种开发语言语法检查
  • 区块选择(Visual Block)
  • 多档案编辑
  • 多视窗功能
  • 挑字补全功能
  • 多级撤销

由于上面的第一条特性,因此Vim特别适合代码编辑,也因此有人称之为“代码开发工具”。

3、模式介绍

基本上 Vim/Vi 可以概括为三种模式,分別是命令模式,插入模式,底线命令模式。他们的作用分别是:

命令模式:用户对一个文件启动 Vim/Vi,便进入了命令模式(也称为一般模式)。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。在此模式下,可以通过命令对文件内容进行删除,复制,粘贴等行为

插入模式:在命令模式下,输入i, I, o, O, a, A, r, R等任意命令,便会立即进入插入模式(也称之编辑模式),在这个模式下,我们才可以对文件进行详细的编辑,比如使用退格键,删除键,回车键等各式各样的文本编辑了。按【ESC】键回到命令模式

底线命令模式:在命令模式下,输入字符【:?/】三个中的任意一个,就会来到底线命令模式下。在这个模式下,我们可以完成搜索、读取、存档、离开Vim/Vi等很多行为。按【ESC】键回到命令模式

以图形来表示一下三种模式的关系:

二、Vim/Vi的使用

大概了解了Vim/Vi后,好奇的你是不是想立刻知道都有哪些好玩的命令呢?下面以表格的形式分别来介绍一下。

1、命令模式下的常用指令

移动游标的方法
h 、 向左方向鍵(←)游标向左移动一个字符
j 、向下方向鍵(↓)游标向下移动一个字符
k 、 向上方向鍵(↑)游标向上移动一个字符
l 、 向右方向鍵(→)游标向右移动一个字符
如果想要进行多次移动的话,比如向下移动 30 列,可以使用 "30j" 或 "30↓" 的组合按键, 也就是加上想要进行的次数,按下指令即可!
[Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]屏幕『向下』移动半页
[Ctrl] + [u]屏幕『向上』移动半页
+游标移动到下一行的行首
-游标移动到上一行的行首
n<space>n 表示『数字』,例如 20 。按下数字后再按空格键,游标会向后移动n个字符的距离。例如 20<space> 则游标向右移动20个字符
0 或功能键[Home]数字『 0 』:移动到这一行的行首
$ 或功能鍵[End]移动到这一行的行尾
H移动到当前屏幕的最上一行的行首
M移动到当前屏幕的中间一行的行首
L移动到当前屏幕的最下一行的行首
G移动到这个文件的最后一行(常用)
nG

n 为数字。移动到这个文件的第n行。例如 20G 则会移动到这个文档的20第20行(可配合 :set nu)

相当于【:n】

gg移动到这个文件的第一行,相当于1G (常用)
n<Enter>n 为数字。游标向下移动n行(常用)
搜索、替换等命令
/word向游标之下查询一个名为word的字串,回车后,就移至到其位置! (常用)
?word向游标之上查询一个名为word的字串
n这个n是英文按键。代表重复执行前一个搜寻的动作。表示下一个next
N这个N与n的方向相反,表示上一个
使用 /word 配合 n 及 N 是非常有帮助的,可以让你重复的找到一些你要搜寻的关键字
:n1,n2s/word1/word2/gn1 与 n2 均表示数字。表示在第 n1 与 n2 行之间寻找word1字符串,并使用word2字符串进行替换(常用)
:1,$s/word1/word2/g从第一行到最后一行搜寻word1字符串,使用word2字符串进行替换(常用) 相当于【:%s/word1/word2/g】
:1,$s/word1/word2/gc从第一行到最后一行搜寻word1字符串,使用word2字符串进行替换!并且在取代前询问使用者来确认是否需要取代!(常用)  
删除、复制与粘贴
x, X在一行字符中,x表示向后删除一个字符(相当于del键),X为向前删除一个字符(相当于退格键) (常用)
nxn 为数字,连续向后删除n个字符。
dd刪除游标所在的那一行(常用)
nddn 为数字。删除游标所在的向下n行(常用)
:n1,n2dn1和n2都是数字,表示删除第n1行到第n2行的数据
d1G刪除游标所在到第一行的所有行数据
dG刪除游标所在到最后一行的所有行数据
d$刪除游标所在行,到该行的行尾
d0 0为数字 ,刪除游标所在行,到该行的行首
yy,Y复制游标所在的那一行数据(常用)
nyy,nYn 为数字。复制游标所在的向下n行(常用)
y1G复制游标所在行,到第一行的所有数据
yG复制游标所在行,到最后一行的所有数据
y0复制游标所在行,到行首的所有数据
y$复制游标所在行,到行尾的所有数据
p, Pp表示将复制的数据粘贴到游标所在行的下一行,P表示将复制的数据粘贴到游标所在行的上一行 (常用)
J将游标所在行与下一行结合成同一行
c重复删除多行数据,例如向下刪除 10 列,[ 10cj ]
u撤销前一个动作。(常用)
学会了撤销后,是不是很快乐啊
.不要怀疑,对,就是小数点!意思是重复前一个动作的意思。 如果你想要重复刪除、重复粘贴等等动作,按下小数点就好了 (常用)

2、进入插入模式的命令

下面的命令都是进入插入模式的命令:
i, Ii 为从目前游标所在处插入, I 为在游标所在行的行首插入 (常用)
a, Aa 为在游标所在处的下一个字符开始插入,A为在游标所在行的行尾插入(常用)
o, Oo为英文字母。o为在游标所在的下一行插入新的一行,O为在游标所在行的上一行插入新行(常用)
r, Rr只会替换游标所在处的那一个字符;R会一直取代游标所在处的字符(常用)
这些按键后,在 vi 界面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。注意:你想要在文件里面输入字符时,一定要在左下角处看到 INSERT 或 REPLACE 才能输入。
[Esc]退出插入模式,回到命令模式中(常用)

3、底行命令模式的退出等操作

底行命令模式的退出等指令
:w将编辑的文件写入磁盘中,即保存(常用)
:w!如文件为只读时,强制写入到该文件。不过到底能不能写入,还是要看你的权限!
:q离开 vi (常用)
:q!强制退出Vi。不进行保存操作。
注意,感叹号!在vi中,常常具有『強制』的意思
:wq保存并退出。若为 :wq! 則表示强制存储并退出 (常用)
ZZ如文件没有更新,则不保存离开,如有更新,就保存离开
:w [filename]将编辑的文件存储为另一个文件,相当于另存为。
:r [filename]在编辑的文件中,读入另一个文件的数据。即将『filename』 这个文件的内容添加到游标之后
:n1,n2 w [filename]将第n1行到第n2行的数据保存到filename文件里
:! command暂时离开 vi 到指令列模式下执行 command 的显示结果。例如『:! ls /home』
VIM的行号设置
:set nu显示行号
:set nonu取消行号

4、一些应用案例

应用1:导入命令执行结果

  :r  !命令

应用2:连续行注释

  :n1,n2s/^/#/g        使用#连续注释

  :n1,n2s/^#//g       取消#的连续注释

  :n1,n2s/^/\/\//g     使用//连续注释

三、Vim的额外功能

1、区块选择的使用

在命令模式下,我们使用按钮v就可以进行区块的处理了,下面是相关命令

区块选择的按键意义
v字符选择,会将游标经过的地方选中
V行选择,会将游标经过的行选中
[Ctrl]+v列选择,可以用方形的方式选择数据
y复制选中的数据
d删除选中的数据
p将复制的数据 粘贴到游标所在处

2、多文档编辑

比如我们想将文件a里的某一行记录,复制到文件b中,我们可以想到在图形化界面中开两个终端来完成。而Vim本身就提供了可以同时编辑多个文件,这样就不用在另开一个终端了,方便又省时。

同时编辑多个文件的语法:Vim  filename1  filename2 ..........

在Vim界面我们可以在底行命令模式下进行下列操作:

:n编辑下一个文件
:N编辑上一个文件
:files列出当前Vim正在编辑的文件列表

3、多窗口功能

现在很多编辑工具都有多窗口功能,每个窗口打开一个文件,我们多用于对比两个文件的内容,用起来特别方便。在Vim上也有这样的功能,很帅吧。

在Vim界面的底行命令模式下,我们可以输入【:sp  filename】打开一个窗口对新文件进行编辑。如果sp后没有指定新文件名,就默认打开同一个文件。

多窗口的按键功能
:sp [filename]开启一个新窗口,指定 filename,新窗口就显示新文件的内容,不指定名称,就是同一个文件。
[ctrl]+w+ j
[ctrl]+w+↓
游标移动到下方的窗口。
[ctrl]+w+ k
[ctrl]+w+↑
游标移动到上方的窗口。
[ctrl]+w+ q关闭游标所在的窗口

4、Vim的单词补全功能

使用过eclipse、notepad++等工具的人都应该知道,单词补全功能可以让人在编辑时提高工作效率。同样的,Vim也不会没有这个功能。

当处于Vim插入模式时,我们输入某一个单词的首字母后,可以按以下组合按键

组合按键补全的内容
[ctrl]+x -> [ctrl]+n以正在编辑的文件里的内容文字作为关键字进行补全
[ctrl]+x -> [ctrl]+f以当前目录内的文件名作为关键字,进行补全
[ctrl]+x -> [ctrl]+o以文件类型的内置语法进行补全

应用案例:

                   

--------------------------------------------------------------------整理完毕,敬请留言---------------------------------------------------------------------------------------

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值