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可以在当前窗口中直接打开该文件

  • 相关阅读:
    自绘标题栏
    显示驱动相关 -- DrvEscape和ExtEscape
    Delphi 直接打印代码(不需要装打印机驱动)
    在TCanvas上画背景透明的矩形
    写作套路中的立功,立言,立德
    python入门(Python和Pycharm安装)
    delphi CxGrid用法总结(63问)
    如何安装inf类型驱动程序 inno
    PHP-SQL Server
    Exchange Tech Issues 参考网站
  • 原文地址:https://www.cnblogs.com/chorulex/p/5377542.html
Copyright © 2011-2022 走看看