zoukankan      html  css  js  c++  java
  • vim简明教程

    模式

    VIM支持四种基本的模式,即普通模式,插入模式,视图模式和命令行模式.

    普通模式Normal mode

    普通模式是最常用的,该模式下,可以执行很多编辑操作以及其他的命令,

    vim最常用的效率最高的操作均是在普通模式下执行的.如果编辑文件需要停止一会或者你去休息了,最好让vim处于普通模式下.

    在任何模式下均可使用[ESC]按键退回到普通模式下,<C-c>命令也可以做到这点.

    但是执行ESC命令时,手指活动的范围太大,操作多了会觉得很累.插入模式下可以执行<C-[>命令回到普通模式下.

     

    插入模式Insert mode

    a/A

    i/I

    c

     

    视图模式Visual mode

    V:选择当前行进入视图模式

    v:选择当前字符进入视图模式

    <C-v>:进入列块视图模式

    gv:重选上次的选取

     

    命令模式Command mode

    :set number显示行号

    :q/w

     

    启动与退出

    Vim [filename,...]

    Vim [filename,...] +line_num 打开文件并定位到指定行

     

    :q无修改退出

    :q!放弃修改强制退出

    :wq保存修改退出

    :x 同:wq

    ZZ 同:wq

    ZQ 同去q!

    :w保存缓冲区内容到文件

     

    使用手册

    命令行模式下输入需要查看的命令或者内容即可查看帮助文档,例如

    :h c 查看c命令的帮助文档

    :h motion 查看有关motion的内容


    移动

    上下左右移动

    h/j/k/l可用于当前光标位置的左上右下移动,

    h:光标移动到左边一个字符,如果到达行首,则进入上一行

    j:光标移动到下一行相同的位置

    k:光标向上移动一行到相同的位置

    l:光标向右移动一个字符,如果到达行尾,则进入下一行

    需要注意的是,上面的针对操作针对实际行。

    这是最基本最简单的移动方式,当然这也是最低效的。

    区分实际行与屏幕行

    行是以分行符来区分的,即一个分行符内的文本为一个实际行,不管屏幕自动分行显示了多少行,都是一个实际行,如果超出屏幕窗口显示长度而自动分行,那么此时这些行称为屏幕行。

    如果是在屏幕行上下移动的话则需要在上述命令前加g。

     

    行内移动

    F/f{char}

    行内搜索字符移动,f{char}搜索本行光标之后的某个字符,并移动到第一个匹配字符后的一个位置;F命令正好是反方向的。

    T/t{char}

    t命令与f命令相似,只是他会移动到匹配字符的前一个字符位置上。

    文件内移动

    /{chars}

    全文搜索匹配的字符串,并移动到第一个匹配字符串的首位置。

    *

    在当前光标所在的单词或者字符串位置,按键*会查找匹配该单词或者字符串,并进入下一个匹配字符串的首位置。

    gg:文件头部

    G:文件尾部

    nG:移动到指定行,n为行号

    0:行首

    $:行尾

    ^:行首第一个非空字符

     

    屏幕内移动

    H:屏幕头部

    L:屏幕底部

    M:屏幕中间

    可以在H/L/M前面加上数字,此时这些数字不代表倍数,而是指距离目标位置多少行。

    比如3H指的是光标定位到距离屏幕顶部3行的位置。

    翻页

    <C-f>:向下翻一页

    <C-b>:向上翻一页

    <C-d>:向下翻半页

    <C-u>:向上翻半页

    <C-e>:光标位置不变,向上按行滚屏

    zz:滚动屏幕,使本行显示在屏幕中间

     

    字符串移动

    E:移动到本字符串或者下一个字符串的尾部

    e:移动到本单词或者下一个单词的尾部

    B: 移动到上一个字符串的首部

    b:移动到上一个单词的首部

    W:移动到下一个字符串的首部

    w:移动到下一个单词的首部

     

    段落间移动

    )  移至下一个句子(sentence)首。

    (  移至上一个句子(sentence)首。

    }  移至下一个段落(paragraph)首。

    {  移至上一个段落(paragraph)首。

    sentence 是以 . ! ? 为区格。

    paragraph 是以空白行为区格。

    函数间移动

    有时我们需要在函数间内快速移动,对于程序员来说,这是最快的最适合的移动方式。

    [[:进入上一个函数的起始处

    ]]:进入下一个函数的起始处

    匹配标记

    像<>/{}/()这样的成对出现的标记符号,可以快速的定位.

    光标先定位到其中一个,然后执行%即可定位到另一个标记位置上.

    很多新手还是习惯的去按箭头按键来移动光标,这种方法很低效,且需要手指大幅度的来回移动,很累的.

    我们应该彻底摒弃这些原始的方式!!!

     


    编辑

    剪切删除

    删除即剪切

    d{motion}

    dd:删除光标所在的整行

     

    c{motion}

    C:删除当前光标到行尾,并且进入插入模式

    cc:删除本行内容,并且进入插入模式

     

    插入模式内删除

    <C-w>:删除光标到本字符串起始处

    <C-u>:删除光标到行首处

     

    X:删除光标前一个字符

    x:删除光标所在的字符


    拷贝

    y{motion}

    yy复制当前光标所在的整行。

    如果不指定寄存器,那么文本将会复制到默认寄存器和选择专用寄存器中,如果想使用寄存器,那么在该命令之前指明寄存器。请参考【寄存器】一节。


    粘贴

    执行粘贴的是p命令。

    如果复制的是非行文本,那么在当前光标之后粘贴,如果是行,那么粘贴到下一行,这是小写的p命令;大写的P命令正好相反。

    另外如果仅执行p/P命令,那么,粘贴的是默认寄存器中的文本,如果向粘贴某个寄存器中复制的文本,那么必须在前面指明寄存器。请参考【寄存器】一节。

     


    撤销

    u

     


    新行

    O/o


    motion

    Motion用于执行删除拷贝等操作符的作用范围,简单而言就是选取。

    aw:整个单词,包含前后的空白符

    iw:整个单词,不包括前后的空白符

    i/a{

    i/a[

    i/a(

    a/it:html等标记语言的tag范围

    t/T{char}

    F/f{char}

     

    典型:

    daw:删除整个单词包括前后的空白符

     


    恢复

    Ctrl+r

    恢复撤销的修改。

     


    点范式

    .

    点命令支持对上一次的操作重复执行。合理设计命令再执行点命令将会大大提高执行效率。

     

     


    寄存器

    寄存器是文件编辑时使用到,可以临时保存文件的删除复制的内容。灵活使用寄存器将大大提高复制和删除的效率。

     

    使用寄存器

    “{register}

     

    默认寄存器

    Vim默认使用的寄存器,如果执行文件操作时不指定寄存器时,将默认使用。

    等同于””

     

    复制专用寄存器

    0:在执行复制操作时,如果没有指定寄存器,那么vim将会将复制的内容将保存在该寄存器。

     

    字母寄存器

    a-z:新的内容将会覆盖旧内容

    A-Z:新内容追加的旧内容上

     

    系统寄存器

    Vim与系统剪贴板的联系通过寄存器“+”,这就允许vim从系统剪贴板拷贝其他程序复制的内容,或者将vim的内容复制到寄存器提供给其他程序使用。

     

    黑洞寄存器

    _:如果真正想删除文件内容并且不再使用,那么应该使用黑洞寄存器,使用后该内容将一去不返!


    查找

    f{char}:本行内正向搜索字符

    F{char}:本行内反向搜索字符

    /{chars}:全文搜索字符串

    *:全文搜索光标下的字符串,并跳转到符合匹配的字符串位置

     

    Indent/Undent

    插入模式下:

    <C-d>:当前行左缩进tab

    <C-t>:当前行右缩进tab

    普通模式下

    >>:当前行右缩进一个tab

    <<:当前行左缩进一个tab

     

    视图模式下:

    >>:当前选中行右缩进一个tab

    <<:当前选中行左缩进一个tab

    自动补全

    Vim原生支持自动补全功能。可在插入模式下触发。

    插入模式下触发方法总结

    命令

    用途

    <C-p>

    普通关键字

    <C-n>

    普通关键字

    <C-x><C-n>

    当前缓冲区关键字

    <C-x><C-i>

    包含文件关键字,例如c/cpp语言下的include包含进来的文件中匹配。

    <C-x><C-]>

    标签文件关键字

    <C-x><C-k>

    字典查找

    <C-x><C-l>

    整行补全

    <C-x><C-f>

    文件名补全

    <C-x><C-o>

    全能补全,根据光标所在的上下文的短范围文本进行匹配补全

     

     

     

    如果匹配选项存在多个的话,那么会弹出选择下拉菜单,支持可以使用<C-n><C-p>选择上一项或者下一项,当然也可以使用上下箭头按键选择。


    替换

    r{char}:替换单个字符

    R{chars}:按位替换,相当于【insert】按键功能

     

    Substitute替换命令

    :[range]s/{pattern}/{string}/[flags]

    :s/src/des:替换当前行第一个匹配的字符串

    :s/src/des/g:替换当前行所有匹配的字符串

    :%s/src/des/g:替换全文匹配的字符串

    :%s/src/des/gc:替换全文匹配的字符串,替换时询问是否替换

     

     


    缓冲区

    VIM使用缓冲区来管理窗口上的文件显示,每个缓冲区仅针对一个文件,一个文件可以使用多个缓冲区。

    缓冲区是文件加载到内存后的显示,所以对文件的修改实际上是对缓冲区的修改,仅当执行了保存,缓冲区的内容才会写入真实的文件中。

     

    缓冲区列表在vim同时打开多个文件时使用非常方便,当仅限于查看而已,不能使用缓冲区命令中途打开新文件。

     

    查看当前缓冲区列表

    :ls

     

    查看指定缓冲区

    命令

    用途

    :b[uffer]f

    激活并显示第一个缓冲区

    :b[uffer]l

    激活并显示最后缓冲区

    :b[uffer]n

    激活并显示下一个缓冲区

    :b[uffer]p

    激活并显示上一个缓冲区

    :b[uffer] N

    激活并显示指定序号的缓冲区

    :b[uffer] path

    激活并显示指定文件路径的缓冲区

     

    删除缓冲区

    :bdelete N1[,N2...Nn]

    :N,M bdelete 

     


    标签页

    :tabedit {filename}命令在一个新的标签页打开文件,如果省略了{filename}参数,那么vim创建一个新的标签页,但是缓冲区空。

    <C-w>+T:如果当前标签页包含了多个缓冲区窗口,使用该命令可以将当前缓冲区窗口移动到一个新的标签页。

    命令

    用途

    :tabe[dit] {filename}

    在新的标签页总打开filename

    <C-w>+T

    把当前窗口移到一个新标签页

    :tabc[lose]

    关闭当前标签页以及其中的所有窗口

    :tabo[nly]

    只保留当前活动标签页,关闭所有其他的标签页

     

    标签页切换

    Ex命令

    普通模式命令

    用途

    :tabn[ext] {N}

    {N}gt

    切换到编号为{N}的标签页

    :tabn[ext]

    gt

    切换到下一个标签页

    :tabp[revious]

    gT

    切换到上一个标签页

     

    标签页移动

    命令

    用途

    :tabmove N

    将当前活动的标签页移动到制定编号的位置

    :tabmove 0

    将当前活动标签页移动到开头

    :tabmove

    将当前活动标签页移动到结尾

     


    分屏

    VIM支持分屏显示。

    左右分屏:<C-w>+v

    上下分屏:<C-w>+s

     

    在使用<C-w>执行分屏时,是以当前缓冲区为基准的,同时得到的新的缓冲区将于原先的保持同步。

    如果需要打开其他的文件,那么使用命令:e[dit] filename

    或者从命令模式中分割窗口

    :vsplit filename

    :split filename

     

    关闭当前分屏:<C-w>+c或者<C-w>+q,需要注意的是如果当前仅有一个屏幕,那么执行<C-w>+q会退出vim。

    使用<C-w>+o关闭所有其他的分屏

     

    使用<C-w>+w可以循环切换分屏

    切换分屏:<C-w>+h/j/k/l,该命令将光标在几个不同的屏幕之间切换


    技巧

    查看当前所在的路径

    命令模式下:pwd

     

    分屏查看当前目录的文件清单

    命令模式下:He,水平分屏浏览当前目录

     命令模式下:Ve,垂直分屏浏览当前目录

     

    如果命令后方追加!,那么将会调整分屏的次序。

    交换两行的顺序

    ddp

     

    执行系统命令

    进入命令模式,

    :!{cmd}

     

    比如查看当前所在路径的所有文件清单

    :!ls

     

    设定当前工作路径

    :lcd {path}该命令可以设定当前窗口的本地工作目录,使用该命令可以让我们不同的标签页工作在不同的目录下。

     

    打开光标下路径的文件

    当光标处于一个文件路径时,此时在普通模式下执行gf可以在当前窗口中直接打开该文件

  • 相关阅读:
    实例属性 类属性 实例域 类域
    研究数据集
    static 静态域 类域 静态方法 工厂方法 he use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class 非访问修饰符
    accessor mothod mutator mothod 更改器方法 访问器方法 类的方法可以访问类的任何一个对象的私有域!
    上钻 下钻 切片 转轴 降采样
    识别会话
    Performance Tuning Using Linux Process Management Commands
    Secure Hash Algorithm 3
    grouped differently across partitions
    spark 划分stage Wide vs Narrow Dependencies 窄依赖 宽依赖 解析 作业 job stage 阶段 RDD有向无环图拆分 任务 Task 网络传输和计算开销 任务集 taskset
  • 原文地址:https://www.cnblogs.com/chorulex/p/5377542.html
Copyright © 2011-2022 走看看