vim编辑器使用详解

vim编辑器使用详解

1、VIM简介

  • Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是纯粹的自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了SlashdotBeanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线,总的来看,Vim和Emacs同样都是非常优秀的文本编辑器。全屏幕的编辑器:VIM,又称,visual interface,是一款文本编辑器,vi, vi iMproved

2、打开文件

1
2
3
4
5
6
vim [options] [file ..]
# vim
# vim /PATH/TO/SOMEFILE
+#:#为行号;
+:快速定位至最后一行
+/PATTERN:快速匹配到文档

3、VIM模式

提示:默认为 编辑模式

  • 模式间转换
  • 编辑模式–>输入模式:
    i:insert, 在当前光标所在处,转换为输入模式
    I:在当前光标所在行行首,转换为输入模式
    a: append, 在当前光标所在处字符后方,转换为输入模式
    A:在当前光标所在行行尾,转换为输入模式
    o: 在当前光标所在行的下方新建一个空白行,并转换为输入模式
    O:在当前光标所在行的上方新建一个空白行,并转换为输入模式
  • 输入模式–>编辑模式:
    ESC
  • 编辑模式–>末行模式:
    :
  • 末行模式–>编辑模式:
    ESC

4、关闭VIM

  • 末行模式:
    :q! 强制退出,不保存编辑的内容退出;
    :wq 保存退出
    :x 保存退出
    :wq!, :x! 强制保存退出

  • 编辑模式:
    ZZ:保存退出

5、编辑命令

5.1、光标跳转

  • 字符间移动:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #{h|j|k|l}:一次移动#个字符间距
    k
    h<-- -->l
    j

    #{w|e|b}:
    单词间移动:
    w:下一个单词的词首
    e:当前或下一个单词的词尾
    b:当前或前一个单词的词首

    行首行尾间跳转:
    0: 跳转至绝对行首
    ^: 行首的第一个非空白字符
    $: 跳转至绝对行尾

    #句子间跳转:
    )
    (

    #段落间跳转:
    }
    {

    #行间快速移动:
    #G:
    #: 目标行编号
    G: 文尾
    1G:文首
  • 末行模式:
    :# 跳转至第#行

5.2、编辑操作

  • x:删除光标所在处的字符

    1
    #x: 删除光标所在处及向后的共#个字符
  • r: replace,替换光标所在处的字符

  • d: 删除命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dd: 删除光标所在行
    #dd: 删除光村所在行及下行的共#行;
    与跳转命令一同使用:
    d$: 删除光标所在处至行尾的内容;同D命令
    d^: 删除光标所在处至行首的内容;

    dw
    db
    de
    上述三个命令支持前面使用#来指明涵盖的单词的个数;
    #COMMAND:#代表数字
  • p: 粘贴,put, paste

    1
    2
    3
    4
    5
    6
    行级别:
    p: 粘贴在光标所在当前行下方
    P: 粘贴在光标所在当前行上方
    小于行级别:
    p: 粘贴在光村所在处的后方
    p: 粘贴在光村所在处的前方
  • y: yank,复制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    yy: 复制光标所在行,相当于Y命令
    #yy: 复制光标所在行及下行的共#行;
    与跳转命令一同使用:
    y$: 复制光标所在处至行尾的内容;
    y^: 复制光标所在处至行首的内容;

    yw
    yb
    ye
    上述三个命令支持前面使用#来指明涵盖的单词的个数;
    #COMMAND:5yy(复制5行)
  • c: change, 修改

    1
    2
    3
    4
    5
    6
    7
    cc: 删除光标所在行整行内容,并立即转为输入模式
    #cc:

    c$, C:
    c^, c0
    cw, cb, ce
    #COMMAND:5cc(删除光标以下5行,并开启输入模式)
  • 撤消操作:

    1
    2
    3
    4
    5
    6
    7
    8
    u: undo
    #u: 一次撤消最近的共#次编辑操作;

    撤消此前的撤消操作:
    Ctrl+r

    重复前一条命令:
    .

6、VIM内建教程

1
[root@localhost ~]# vimtutor

7、VIM可视化模式

v: 字符可视化,选择光标所在行的光标左侧的内容
V:行可视化,光标所在行整行都会被选定
ctrl+v:进入的块可视化模式,可以选择一个矩形内的文本

1
2
3
4
5
6
7
8
9
10
11
#进入可视化模式后常用操作指令:
d:删除选中文本
c:修改选中文本,删除选中的文本,然后输入想要的内容
r:替换选中文本,将选中的文本替换成单个字符
I:在选中文本前插入
A:在选中文本后插入
gu:选中区域转为小写
gU:选中区域转为大写
g~:大小写互调
>:向右缩进一个单位
<:向左缩进一个单位

注意:注意:操作完成之后,‘esc’结束操作或退出可视化

  • 三种模式之间可以输入相关命令切换,例如:
    v(进入字符可视化) — v或esc(退出)
    v(进入字符可视化) — V(进入行可视化)

8、编辑模式下的翻屏命令

Ctrl+f: 向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d: 向文件尾部翻半屏
Ctrl+u: 向文件首部翻半屏

9、文本查找

/PATTERN:向尾部进行
?PATTERN:向首部进行

n: 与命令同方向
N:与命令反方向

10、文本替换

10.1、末行模式:内置命令行接口,有命令历史记录功能

  • 有部分内置命令用于编辑操作,此时可使用地址定界法进行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #地址定界:
    startline[,endline]:
    #: 第#行
    .: 当前行
    $: 最后一行
    %: 全文

    #相对定界:
    +#: 从指定位置向下#个行
    -#:从指定位置向上#个行

    /pat1/:第一次被此模式所匹配到的行;
    #,/pat1/
    /pat1/,/pat2/

    #后可跟编辑命令:
    d, y
    w, r

10.2、文本替换命令:s

  • s/要查找的内容/要替换为的内容/修饰符
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /: 分隔符,用于分隔“查找的内容”和“替换为的内容”;此分隔符可使用其它字符,如@,#等;

    要查找的内容:可使用正则表达式;此部分可以后面“替换为的内容”部分中使用“&”全部引用;

    替换为的内容:不可使用正则表达式,一般为正常文本,但可以使用正则表达式中的\1, \2, ...保存的内容;

    修饰符:
    i: 查找时不区分字符大小写
    g: global,全局替换;

    注意:引用

11、文本读取

  • 在vi中执行命令和导入文件

提示:在末行模式下

导入文件: :r FILENAME
执行命令: :!COMMAND
导入执行命令的结果: :r!COMMAND

11、多文件模式

  • 打开文件

    1
    2
    3
    vim [OPTION]... [FILE]...
    +#: 快速定位至第#行;
    +/PATTERN: 快速定位至被模式第一次匹配至行;
  • 多文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    vim FILE1 FILE2 FILE3 ...

    #末行模式:
    :next 下一个
    :prev 前一个
    :first 第一个
    :last 最后一个

    #退出所有文件
    :wqall
    :wall
    :qall

    #多窗口:
    -o: 水平分隔窗口
    -O: 垂直分隔窗口

    #Ctrl+w, ARROW

注意:单个文件也可以分隔为多个窗口进行查看
Ctrl+w, s: 水平分隔
Ctrl+w, v: 垂直分隔

12、VIM界面显示特性

  • 开户或关闭行号显示
    :set number, :set nu
    :set nonumber, :set nonu

  • 语法高亮的开启和关闭
    :syntax on
    :syntax off

  • 搜索高亮的开启和关闭
    :set hlsearch
    :set nohlsearch

  • 自动缩进的开启和关闭
    :set autoindent, :set ai
    :set noautoindent, :set noai

  • 区分字符大小写的开启和关闭
    :set ignorecase, :set ic
    :set noignorecase, :set noic

  • 高亮显示匹配的符号对儿:
    :set showmatch, :set sm
    :set noshowmatch, :set nosm

13、vim的配置文件

  • 全局配置:/etc/vimrc
  • 指定用户配置: ~/.vimrc

14、练习

  • 复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;
    答::%s@^[[:space:]]@#&@

  • 复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;
    答::%s@^[[:space:]]\{1,\}@@

  • 删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符
    答::%s@^#[[:space:]]\+@@

  • 为/tmp/grub.conf文件中前三行的行首加#号;
    答::1,3s@^@#@

  • 将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;
    答::%s@\(gpgcheck\|enabled\)=0@\1=1@

-------------本文结束感谢您的阅读-------------
LiGuanCheng wechat
如有问题,请与我微信交流或通过右下角“daovoice”与我联系~。
请我喝一杯咖啡~