功能强大的Linux文本编辑器之Vim的使用

VIM编辑器

 

Vim章节的内容:

   使用vivim的三种主要模式

   移动光标,进入插入模式

   改变、删除、复制文本

   撤销改变

   搜索文档

   vim寄存器

   可视化和多窗口

   vim帮助

一、文本编辑器种类的简单介绍:

  行编辑器:sed

  全屏编辑器:nanovivim(可以理解为vi的升级版)

  简单的图形编辑器:gedit

  图形版的vim编辑器:gvim

二、了解vim的主要模式:

1、三种主要模式:

  命令模式(默认):光标的移动,文本的剪切与粘贴

  插入模式:文本内容的修改

  扩展命令模式:保存,退出;修改、查找与替换等

  注:“ESC”按键:退出vim的当前模式,每次的使用都是返回到命令模式下。

blob.png

2、  模式的转换:

1)命令模式>>>插入模式:

   i: 在光标所在处输入

   I:在当前光标所在行的行首输入

   a:在光标所在处后面输入

   A:在当前光标所在行的行尾输入

   o:在当前光标所在行的下方打开一个新行

   O:在当前光标所在行的上方打开一个新行

2)插入模式>>>命令模式:

   按键“ESC

3)命令模式>>>扩展命令模式:

   冒号(:)

4)扩展命令模式>>>命令模式:

   按键“ESC 

注:编辑界面的锁定与解锁:(界面锁定时,在键盘上敲击的字符虽然没有显示输入,但当解锁时,所输的字符会自动写入。)

Ctrl+s  锁定;Ctrl+q  解锁 

三、Vim的文件打开与关闭

1man帮助查看vim的格式使用:

  vim [options] [file ..]

  例:vim name 新建文件并命名为name

 blob.png

注:使用vim打开文件,如果该文件存在,文件被打开并显示内容;如果该文件不存在,当编辑后第一次存盘时创建它 

2vim打开文件:

  +#: 打开文件后,直接让光标处于第#行的行首

  +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首

  vim + file 直接打开file,光标在最后一行

  vim b file 二进制方式打开文件

  vim d file1 file2 比较多个文件

  vim -m file 只读打开文件

  ex file vim –e 直接进入ex模式(扩展模式) 

3vim关闭文件:

1)扩展模式下关闭文件:

   :q 退出

   :q! 强制退出,丢弃做出的修改

   :wq保存退出

   :x保存退出

2)命令模式下关闭文件:(该方式关闭文件在文件出现修改的情况下不建议使用。)

   ZZ: 保存退出

   ZQ:不保存退出

四、命令模式下vim的使用:

1、光标的跳转:

字符间的跳转

左:h

右:l(小写L

上:k

下:j

单词间的跳转

下一个单词的词首:w

当前或下一个单词的词尾:e

当前或下一个单词的词首:b

#指定一次跳转的单词数:#COMMAND

当前页的跳转

页首:H

页中间行:M

页底:L

行首、尾的跳转

跳转到行首第一个非空白字符:^

跳转到行首(真正的行首):0

跳转到行尾:$

行间的跳转

跳转至由#指定的行:#G

(扩展命令模式下:#

跳转到最后一行:G

跳转到第一行:1Ggg

句间的跳转

下一句: ):

上一句: (:

注:以.为句间跳转

段落间的跳转

下一段: }

上一段: {

注:以较大的空行为一段跳转

2、翻屏操作:

向文件尾部翻一屏

向文件首部翻一屏

向文件尾部翻半屏

向文件首部翻半屏

Ctrl+f

Ctrl+b

Ctrl+d

Ctrl+u

3、字符的编辑与替换命令:

字符编辑

x: 删除光标处的字符;

#x: 删除光标处起始的#个字符     注:最多只能删除到行尾)

xp: 交换光标所在处的字符及其后面字符的位置   (注:相当于剪切后粘贴,前后位置互换。)

~:转换大小写

替换命令

r: 替换光标所在处的字符 (注:r后面跟上输入需要替换掉后的内容。

R:切换成REPLACE模式    (注:当切换模式后,输入什么就替换什么,当到了行尾后就继续输入。ESC退出回到命令模式。 

4、命令模式下vim的复制、删除、改变、粘贴:

复制命令

删除命令(从光标处开始)

改变命令(从光标处开始)

y

复制,单一字符的复制

d

删除命令,可结合光标跳转字符,实现范围删除

c

修改单个字符后(相当于删除后)切换成插入模式

y$

从光标处到行尾的复制

d$

删除到行尾

c$

删除到行尾,切换成插入模式

y0

从光标处到非空行首的复制

d^

删除到非空行的行首

c^

删除到非空行的行首,切换成插入模式

y^

从光标处到行首的复制

d0

删除到行首

c0

删除到行首,切换成插入模式

ye

从光标处到下一个单词词首的复制

de

删除到下一个单词的词首

ce

删除到下一个单词的词首,切换成插入模式

yw

从光标处到当前单词的词尾或者下一个单词词尾的复制

dw

删除到当前单词的词尾或者下一个单词的词尾

cw

删除到当前单词的词尾或者下一个单词的词尾,切换成插入模式

yb

从光标处到当前单词的词首或者前一个单词词首的复制

db

删除到当前单词的词首或者前一个单词的词首

cb

删除到当前单词的词首或者前一个单词的词首,切换成插入模式

#COMMAND

如:3yb,将光标处到前三个单词之间进行复制

#COMMAND

如:5dw,往行尾删除5个单词

#COMMAND

如:3ce,光标处往行尾删除3个单词, ,切换成插入模式

yy

复制光标所在的行

dd

删除光标所在行

cc

删除当前行并输入新内容

#yy

复制多(#)行

#dd

多(#)行删除

#cc

多(#)行删除并输入新内容

Y

复制整行

D

从当前光标位置一直删除到行尾,留空行,等同于d$

C

删除当前光标到行尾,并切换成插入模式

粘贴命令:

p(小写):缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面

P(大写):缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面

5vim的特殊使用以及命令的撤销更改:

1vim的特殊使用:

   A100igogo [ESC] :粘贴“gogo100

   B<start position><command><end position>

     Command:y 复制、d 删除、gU变大写、gu变小写

   例如0y$ 命令意味着:

      0 →先到行头

      y →从这里开始拷贝

      $ →拷贝到本行最后一个字符

      ye 从当前位置拷贝到本单词的最后一个字符

2vim命令撤销:

   u撤销最近的更改

   #u撤销之前多次更改

   U撤消光标落在这行后所有此行的更改

   按Ctrl-r重做最后的“撤消”更改

   . 重复前一个操作

   n.重复前一个操作n 

6、可视化使用(可视化模式):允许选择的文本块

1v面向字符 :在命令模式下,按c键后,使用方向键可以逐个字符进行选定,如下图:

  blob.png

2V面向行 :在命令模式下,按C(大写)键后,使用方向键可以逐个行块进行选定,如下图:

  blob.png

3Ctrl+v 面向块 :如下图,先往下选定所需要的行后,再往右进行选定,可实现块选定。

  blob.png

4)可视化键可用于与移动键结合使用:w,),},箭头等

   突出显示的文字可以被删除,复制,变更,过滤,搜索/替换等 

五、扩展命令模式下的vim使用:

1、地址定界:

  /pat1/,/pat2/   :从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束

  #,/pat/        :从#行开始到被模式空间匹配到结束

  /pat/,$        :从模式空间匹配到开始,一直到文本的尾部结束

  使用方式:后跟一个编辑命令

  d file:将指定范围的内容删除

  y file:将指定范围的内容复制

  w file:将范围内的行另存至指定文件中

  r file:在指定位置插入指定文件中的所有内容

  如下图:读取他处的文本内容写入

  blob.png

  如下图:将编辑后的文本内容另存指定的路径和重新命名文本名存放

  blob.png

  如下图:查看另存的新文本内容

  blob.png

2、扩展命令模式下vim的查找:

  /PATTERN:从当前光标所在处向文件尾部查找

  ?PATTERN:从当前光标所在处向文件首部查找

  n:与命令同方向

  N:与命令反方向

3、扩展命令模式下vim的查找与替换:

1)格式:s/要查找的内容/替换为的内容/修饰符

   查找替换中的分隔符/可替换为其它字符,例如

   s@/etc@/var@g s#/boot#/#i

2)查找内容、替换内容及修饰符的注意点:

   要查找的内容:可使用模式

   替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容

   修饰符:

        i: 忽略大小写

        g: 全局替换;默认情况下,每一行只替换第一次出现

        gc:全局替换,每次替换前询问 

4vim编辑二进制文件

1)以二进制方式打开文件:

    vim –b binaryfile

2)扩展命令模式下,利用xxd命令转换为可读的十六进制

   :%!xxd

3)编辑二进制文件

4)扩展命令模式下,利用xxd命令转换回二进制

   :%!xxd –r

5)保存退出 

5vim的寄存器:

1)了解命名寄存器和数字寄存器:(未指定,将使用无命名寄存器)

   有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。用ab,…,z来做“寄存器”名称。

   有10个数字寄存器,用01,…,9表示,0存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到22转存到3,以此类推。但数字寄存器不能在不同会话间共享。

2)使用格式及例子:

   使用格式:#” 寄存器名称 命令

   如:3"tyy 表示复制3行到t寄存器中

   "tp 表示将t寄存器内容粘贴 

6、多文件编辑下,扩展命令模式的vim使用:

   vim FILE1 FILE2 FILE3 …

   :next 下一个

   :prev前一个

   :first 第一个

   :last 最后一个

   :wall 保存所有

   :qall退出所有

   :wqall 

六、vim的命令模式下的多窗口及定制工作特性:(在窗口间切换:Ctrl+w, 再按箭头进行切换窗口)

1、多窗口分割:

1)多文件分割

   vim -o|-O FILE1 FILE2 …

   -o: 水平分割

   -O: 垂直分割

2)单文件窗口分割:

   Ctrl+w,s: split, 水平分割

   Ctrl+w,v: vertical, 垂直分割

   ctrl+w,q:取消相邻窗口

   ctrl+w,o:取消全部窗口

 :wqall退出 

2vim工作特性定制:

1)配置文件:永久有效

   全局:/etc/vimrc

   个人:~/.vimrc

   扩展模式:当前vim进程有效

3、工作特性的启用与取消:

显示

取消显示

行号

set   number, 简写为set nu

set nonumber, 简写为set nonu

括号成对配对

set   showmatch, 简写为set sm

set   nosm

自动缩进

set   ai

set   noai

高亮搜索

set   hlsearch

set   nohlsearch

语法高亮

syntax   on

syntax   off

忽略字符的大小写

set   ic

set   noic

文件格式

fileformat=unix

fileformat=dos

设置文本宽度

:set textwidth=65 (vimonly)  从左边算起第65个字符自动换行。;   :set wrapmargin=15   从右边开始算起15个字符自动换行。

帮助

:help option-list  :setor:set all  (在help里面使用该命令查看) 

4、了解更多的help

  vi/vim内置帮助( :help :helptopic Use:qto exit help Vimtutor 

练习:

1、复制/etc/profile/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

   :%s@^[[:space:]]\+@@

  blob.png

2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#

  :%s@^[[:space:]]\+@#&@

  blob.png

  blob.png

作业:

1、  如何设置tab缩进为4个字符?

   :set ts=4

  blob.png

  blob.png

2、  复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init/var/log

   :%s@/etc/sysconfig/init@/var/log@

  blob.png

  blob.png

3、  删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号;

   :%s@#@@

blob.png

blob.png

 

原创文章,作者:Aaron_wang,如若转载,请注明出处:http://www.178linux.com/33238

(0)
Aaron_wangAaron_wang
上一篇 2016-08-12
下一篇 2016-08-12

相关推荐

  • 马哥教育网络班21期+第1周课程练习

    (一)计算机的基础认识       1. 冯诺依曼体系:          运算器(ALU Arithmetic Logical Unit):完成算数和逻辑运算。          控制器(CU Control Unit):发出各…

    Linux干货 2016-07-07
  • 09yum的使用以及简单配置

    YUM: yellowdog update modifier ,rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包。 yum repository:yum repo,存储了众多RPM包,以及包相关的元数据文件,放置于特定目录repodata下。 yum 访问的文件服务器主要有三种,ftp,http,file。 yum客户端配置文件: 【/…

    Linux干货 2016-11-04
  • Linux简单命令说明(date、clock、echo 、Tab键、screen)

    Linux简单命令说明 1、如何查询命令的帮助文档 外部命令:是系统用应用程序的一部分,在系统启动时不会被加载到内存,而在服务或进程启用时 才执行它。 查看 COMMAND –help man COMMAND 内部命令:是简小的命令,开机就已加载到shell中。 查看 help COMMAND 2、date和clock命令 date #显示当前系统时间 […

    Linux干货 2017-07-12
  • 上下文管理练习(为加法函数计时)

    上下文管理(为加法函数计时) 为加法函数计时 使用装饰器显示该函数的执行时长 使用上下文管理显示该函数的执行时长 装饰器实现 import time import datetime from functools import wraps def logger(fn): @wraps(fn) # wraps(fn)(wrapper) def wrapper(*…

    2017-11-18
  • ifconfig

    ifconfig 命令详解

    Linux干货 2018-02-10
  • 马哥教育网络班20期-第四周课程作业

    Table of Contents 1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 2、编辑/etc/group文件,添加组hadoop。 3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/h…

    Linux干货 2016-06-26