admin 管理员组

文章数量: 887021

1 引言

VIM是unxi或类unix操作系统必备的一款文本编辑器(当然目前也有windows版本GVim),其基本功能还是用来浏览编辑文本文件的。本文也是阐述文件的编辑保存功能,其他的一些高级功能请另行查阅相关文档。

编辑文件前确定键盘大写锁定未开启。先看一个实例:

打开文件test.txt,并将第一行删除:
vim test.txt  --> gg --> dd --> shift + : --> wq

vim test.txt : VIM打开文件test.txt,如果文件不存在就是新建
gg           : 跳转到第一行
dd           : 删除当前光标所在行
shift + :    : 同时按下键盘shift键和:(L旁边的冒号分号键),进入命令模式
wq           : 在上一步执行后的光标出,输入wq,保存文件并退出

关于保存文件的一点说明:
w           : 英文write的缩写,即写入更新文件,也叫保存文件
q           : 英文quit的缩写,退出当前文件编辑
w filename  : 保存到文件filename中
q!          : 放弃更改,强制退出

VIM的熟练使用,可以解放鼠标及光标,双手一直在键盘字母输入区域,可以大大提高输入效率。另外由于VIM的操作涉及各个字符按键,多用VIM也可以提高对键盘操作熟练度。

2 操作模式

VIM的灵魂在于它的操作模式,不同模式间切换,能够极大的丰富按键功能。VIM的操作模式有正常模式、插入模式、命令模式,以上三种是最基本必用的,还有一种可视模式,主要用于块操作,可用要不用,但对程序员来说其列编辑模式还是十分有用的。

正常模式(normal-mode)

在其他模式下,按下Esc按键(一次不行多按几次)就能回到正常模式。
正常模式,各种按键就相当于是一个功能键,代表的是某个功能。
正常模式也是最主要的一种模式,也是用的最多的,通常切换到其他模式下,都要先切换到正常模式,即其他模式间是不支持相互切换的。

插入模式(insert-mode)

插入模式,就是普通文本输入模式。
从正常模式进入到插入模式有多种方式,以下列举出一些常用的:

i            : 在光标前插入
I            : 在行首插入
a            : 在光标后插入
A            : 在行尾新增输入(**大写字母,未开启大写锁定,可以shift+字母,**)
o            : 在光标下方新增一行,进行输入
O            : 在光标上方新增一行,进行输入
s            : 删除光标所在字符,后进行插入
S            : 删除光标所在行,后进行输入

命令模式(command-mode)

命令模式下,可以执行各种命令,如w保存文件命令,还有诸如查找、替换、配置VIM选项等命令。
正常模式下,输入:(shift+冒号分号键)可进入到命令模式,在屏幕出现:命令行,可输入功能命令。

可视模式(visual-mode)

可视模式,主要是用来高亮选中一大段块内容,正常模式只能移动光标,但不能选中一段内容。选中一段数据后,可以用于复制、保存、删除等操作(此处的保存相当于实现部分保存功能,选中某部分内容,另存为文件)。
可视模式有三种常见的模式,在可视模式下,即可相互切换:

v         : 普通可视,移动光标可以选中一段数据
V         : 可视行,移动光标*以行为单位*选中一段数据
ctrl + v  : 可视列,移动光标*以列为单位*选中一段数据,可进行可视列编辑

3 基本操作

文件的打开,保存在引言部分已有说明,在此不再复述。
本章节操作无特别说明都是在正常模式下使用,其他模式下会特意说明。

光标移动

  1. 基本移动

    h j k l 分别相当于光标 ←↓↑→,hjkl用于移动光标用得是最基本也是最多的。

  2. 其他的光标移动

    按键功能说明备注
    0行首按下按键0,光标会移动到所在行的行首
    $行尾
    b单词起始b是begin首字母
    e单词结尾e是end首字母
    w下一个单词w是word首字母
    +下一行行头行头表行第一个非空字符
    -上一行行头


    光标移动的操作是其他一切操作的基础。

输入内容

切换到插入模式,即可输入文本内容,见第2节操作模式部分。

剪切、更改、复制、粘贴

  1. 剪切

    按键功能说明备注
    x剪切字符将光标所在字符剪切
    dd剪切整行
    D剪切到行尾
    dw从光标处剪切到下个单词起始位置d是一个组合功能按键,单独按没有意义
    db从光标处剪切到所在单词起始位置
    de从光标处剪切到所在单词结束位置
    d0剪切到行首行头表行第一个非空字符
    d$剪切到行尾与D效果一致,比D要多按个键
    d…d还可以接其他的光标移动操作按键,此处不再一一列举


    关于剪切组合功能d, d是delete的首字母,其与光标移动的操作配合,能实现灵活的剪切操作功能,所有的光标移动操作都能与d组合使用。另外还可配合重复操作(下文有介绍),可快速实现多项的剪切,如5dd,表示删除5行。剪切的数据存在于vim的缓冲区。

  2. 更改

    按键功能说明备注
    cc更改整行先剪切整行,进入插入模式,进行输入
    C更改至行尾先剪切至行尾,进入插入模式,进行输入
    cw更改到下个单词起始位置c是一个组合功能按键,与d用法相似
    c…c还可以接其他的光标移动操作按键,此处不再一一列举


    其实更改d功能与剪切c功能相比,就是多了个进入插入模式功能。cw与dwi是一样的效果。 c是单词change的首字母。

  3. 复制

    按键功能说明备注
    yy复制整行将光标所在行复制下来,复制到行尾只能用y$
    Y同上同上
    yw复制到下个单词起始位置y也是一个组合功能按键,与d用法相同
    y…y还可以接其他的光标移动操作按键,此处不再一一列举


    y组合按键的的用法,同剪切d的用法,与光标移动按键及重复操作配合,灵活实现复制操作。y用于复制,是单词yank的首字母,之所以不用copy的首字母c, 是因为c同时也是change的首字母,用于更改。复制的数据也是存在于vim的缓冲区。

  4. 粘贴

    p : 字母p,是用于正常模式下的粘贴,粘贴来自vim缓冲区的内容,包括剪切、更改去除、复制的内容。p是paste的首字母p

    如果要粘贴外部复制的数据,如在vim外的crtl+c复制来的数据,那么切换到插入模式下,使用shift+Insert组合按键来实现粘贴,vim内部是不支持crtl+c、ctrl+v。

小结:剪切(d)、更改(c)、复制(y)都是可以配合光标移动按键使用,用法相同,需要熟练掌握。

查找、替换

  1. 查找

    vim的查找支持基本的正则表达式查找。

    按键功能说明备注
    /[pattern]向下查找模式[pattren],按下Enter键开开始查找/a 表示向下查找字母a; /[1-9] 表示向下查找1-9的任意一位数字
    ?[pattern]向上查找模式[pattren]
    n顺方向查找下一处n是next的首字母
    N反方向查找下一处
    %括号匹配显示匹配的括号,程序编写检查括号常用


    有些字符有特殊功能使用,需要转义字符/转义,如查找/, 要用“/\/”。下方的替换操作也是如此。
    /及?查找,最后需要按下Enter键才开始执行动作。

    tips:

    查找单词全词匹配: /\<plus\> 查找单词plus。
    其中\是转义字符,<表示单词开头,>表示单词结尾。

    查找时忽略大小写:/plus\c 结尾使用\c表示忽略大小写。
    如果要默认忽略大小写,需要通过设置命令,下文会加以介绍。

  2. 替换

    s替换操作要切换到命令模式,在命令行上输入,支持正则表达式模式操作

    按键功能说明备注
    r+单字符单字符替换,将光标所在字符替换为r后的字符正常模式下使用,r是replace首字母
    R连续替换多个字符正常模式下使用
    s/old/new将所在行匹配到的第一个old替换成new
    s/old/new/g将所在行匹配到的所有old替换成newg是global的首字母
    s/old/new/c将所在行匹配到的所有old替换成new,但替换前会提示确定c是confirm的首字母
    %s/old/new/gc将整个文件匹配到的old替换成new
    #,#s/old/new/gc是一个数字表行数,将两个数字之间的行中的old替换成new10,20s/old/new/g 表示将10到20行中的old替换成new


    s替换操作,也是最后要按下Enter键才开始执行

重复及撤销类操作

  1. 重复操作

    重复操作在前面已有提及,5dd表示删除5行。
    重复操作就是在动作前面加个一个数字,表示用于连续执行动作次数。
    5j 向下移动五行;
    5dd 删除5行;
    5yy 复制5行。

  2. 撤销类操作

    撤销类的操作,是针对文件修改的撤销,未修改操作如光标移动,没有撤销说法,即光标移动后,再撤销按键,是无法回到上次光标位置。

    按键功能说明备注
    u撤销上一次的修改操作
    ctrl+r恢复撤销r是recover的首字母;如果误操作撤销,可按ctrl+r恢复
    U撤销或者恢复整行的修改按下U,撤销整行的修改,撤销后再按一次U是恢复整行的修改


文件定位及状态

本节主要介绍文件的定位操作(包括跳转,翻页等功能),以及查看文件状态。

按键功能说明备注
ctrl+g在屏幕下方显示当前文件状态
gg跳转到文件开头
G跳转到文件末尾
数字+G跳转指定数字行
数字+gg同上
ctrl+f前滚一屏,也即下一页
ctrl+b后滚一屏,也即上一页


命令模式操作

本节介绍下命令模式下的一些常用命令操作,顾名思义,首先得按:进入到命令模式下。

按键功能说明备注
set xxx设置类命令,设置xxx选项,支持简写为se
w FILENAME以文件名FILENAME保存文件,相当于另存为w 保存当前文件
r FILENAME提取文件FILENAME内容插入到当前光标处
r ![shell cmd]执行shell cmd提取其标准输出内容,插入到当前光标处如r !ls表示在外部shell下执行ls命令并将其输出内容,插入到当前光标处
!shell cmd在外部shell中执行shell cmd


关于设置类常用命令:

按键功能说明备注
se nu在每一行前显示出行号se是set的简写,number的简写
se nonu取消设置行号,即不显示出行号取消设置某一命令,都是在相应命令前加上no组成取消命令,nonu就是nonumber的简写
se ic设置查找时忽略大小写ic是igorecase的简写
se hls将查找到的字符串高亮显示hls是hlsearch的简写
se is在输入查找内容时,就实时显示出第一个找到的内容is是incsearch的简写
help cmd获取命令帮助如:help set、help incsearch


列块操作,不常用(notepad++支持,程序员用的多)

1、保存部分内容
 shift+v --> 移动光标选中若干行 --> : w FILENAME

2、列编辑插入

crtl+v --> 移动光标选中若干列 --> shift+i 列插入--> 输入文本 --> 连按两次Esc键 --> 选中的列前都有输入文本

crtl+v --> 移动光标选中若干列 --> d --> 删除选中列

例:
//a[0].no    = 1;
//a[0].name  = "XiaoMing";
//a[0].grade = 1;
//a[0].class = 2;
将每行前的//删除,且将a[0]中的0改成1

按如下操作:
光标移动到第一行行首处 --> crtl+v --> 按j跟l选中所有的// --> d --> 光标移动到第一行的0上 --> 移动j选中所有的0 --> 输入r1,将所有0替换成1 --> 结束 

tips:
    I : 列编辑下,在光标处插入
    A : 列编辑下,在光标后插入

小结

掌握以上基本操作,相信就可以实现大部分的文件编辑功能。当然VIM的功能按键多如牛毛,往往在正常模式误按到某个键而调用了其相应功能,只要使用撤销操作,以及Esc键,回到正常模式下。

本文标签: 操作 就够了 vim