vim

VIM

光标移动

  • 基本

    h j k l
    
  • b   向前移动,光标停在第一个字符 (backward)
    w   向后移动,光标停在第一个字符 (word)
    e   向后移动,光标停在最后一个字符 (end of word)
    
  • 行首或行尾

    $   移动到行尾
    ^   移动到行首,非空白字符
    0   移动到行首,第一个字符
    
  • 指定字符

    f   单行搜索下一个单个字符 (find)
    F   单行搜索上一个单个字符
    t   单行搜索下一个单个字符,光标停在前一个字符 (to)
    T   单行搜索上一个单个字符,光标停在前一个字符
    
  • 匹配括号

    %   移动到匹配的括号或移动到括号
    
  • 移动到指定行

    G    移动到最后一行
    33G  移动到第 33行
    gg   移动到第一行
    40%  移动到40%
    H    移动到屏幕内第一行 (home)
    M    移动到屏幕内中间 (middle)
    L    移动到屏幕内最后一行 (last)
    
  • 滚屏

      向上滚动半屏 (up)
      向下滚动半屏 (down)
      向下滚动一屏 (forward)
      向上滚动一屏 (backward)
    
  • 简单查找

    /string      向下查找包含 string的词
    ?string      向上查找包含 string的词
    /\  向下查找 string
    ?\  向上查找 string
    n            重复前一次查找
    N            重复前一次相反的查找
    /        之前的查找
    *            向下查找光标所在处的词,全词匹配
    #            向上查找光标所在处的词,全词匹配
    g*           向下查找包含光标所在处的词
    g#           向上查找包含光标所在处的词
    
  • 标记:

    m{mark}  讲此处标记为 mark,mark 为一个字母
    `{mark}  跳到标记 mark处,` 是1左边那个键
    '{mark}  跳到标记 mark处所在行行首,'是单引号
     特殊的mark
        '  此次跳转之前的起跳点
        "  上次编辑该文件时光标最后停留的位置
        [  最后一次修改的起始位置
        ]  最后一次修改的结束位置
    
  • 其他命令

    :set number    显示行号,左边 (se nu)
    :set nonumber  不显示行号(se nonu)
    :set ruler     显示光标位置,右下角 (se ru)
    :set noruler   不显示光标位置 (se noru)
    
    :set ignorecase    查找忽略大小写
    :set noignorecase  查找不忽略大小写
    :set hlsearch      查找高亮 (se hls)
    :set nohlserch     关闭查找 (se nohls)
    :set incsearch     键入目标字符串时就开始查找
    :set nowrapscan    搜索过程在文件结束时就停止
    

简单修改

  • 插入

    i  在当前光标处插入
    I  在当前行第一个非空白字符前插入
    a  在当前光标之后插入
    A  在当前行尾插入
    o  在当前行之下插入
    O  在当前行之上插入
    
  • 删除

    d   删除操作符 (delete)
    c   修改操作符,删除之后自动进入插入 (change)
    dd  删除一行
    cc  修改一行
    x   dl ,删除光标处字符
    X   dh ,删除光标左边的字符
    D   d$ ,删除到行尾
    C   c$ ,修改到行尾
    s   cl ,修改光标字符
    S   cc ,修改一整行
    r   替换(删除之后插入并回到 Normal)
    .   执行上一次所执行的更改命令
    
  • 复制

    y    复制操作符 (yanking)
    yy   复制一行
    yw   复制word,包含之后空白字符
    ye   复制word,不包含之后空白字符
    yaw  复制word,包含之后空白字符
    yiw  复制word,不包含之后空白字符
    yab  复制一个小括号里面的内容,包括括号本身
    yib  复制一个小括号里面的内容,不包括括号本身
    ya{  复制一个大括号里面的内容,包括括号本身
    yi{  复制一个大括号里面的内容,不包括括号本身
    p    粘贴(put)
    
  • 对齐

    =    对齐操作符
    ==   对齐一行
    n==  对齐n行
    =a{  对齐一个大括号里面的内容
    
  • 大小写替换

    ~     大小写替换
    g~    大小写替换操作
    g~iw  改变光标处单词大小写
    guiw  光标处单词变成小写
    gUiw  光标处单词变成大写
    
  • 命令计数器 n+命令

    一个命令重复执行
    如:4x删除 4个字符
    
  • 操作命令符 +位移命令符

    操作如:删除 d,复制y ;位移如:词语 w,$ 行尾
    d$    删除到句尾
    4yy   复制4行
    3dw   3次删除一个单词
    d3w   一次删除 3个单词
    3d2w  3次删除 2个单词
    
  • 常用删除命令

    x(dl), X(dh), D(d$), dw, db, diw, daw, dG, dgg
    
  • visual 模式(主要功能就是选择)

    v 进入visual模式,移动光标选择操作文本范围
    V 进入visual行模式,选择以行为单位
     进入visual块模式,选择块
    

查找替换

  • 查找命令

    /, ?, n, N, #, *, g#, g*, gd, gD
    
  • 替换命令

    :[n,m]s/[src]/[dst]/[g][c]
    [n,m]  表示一个范围,从 n~m行中查找替换,[n,$]表示从第 n行之后
    %      表示整个文件
    [src]  要查找的词, [dst]要替换的词
    [g]    替换所有的匹配,若没有,只匹配第一个
    [c]    替换前询问
    /      为分隔符,也可以用 +或# 来分隔
    
    :s/src/dst/         替换当前行第一个 src为dst
    :s/src/dst/g        替换当前行所有 src为dst
    :n,ms/src/dst/      替换n~m行第一个 src为dst
    :n,$s/src/dst/g     替换第n行到最后一行中所有 src为dst
    :%s/src/dst/g       替换整个文件中所有 src为dst
    :%s/src/dst/gc      替换整个文件中所有 src为dst 并询问是否替换
    :%s/\/dst/gc  与:%s/src/dst/gc一样(全词匹配)
    
  • 正则匹配

    *   匹配0以上之前的字符
    \+  匹配1个以上之前字符
    \=  匹配0个或 1个之前字符
    \?  匹配0个或 1个之前字符
    .   匹配任何单个字符
    \<  匹配一个单词的开始
    \>  匹配一个单词的结束
    \s  匹配空白字符 
    \S  匹配非空白字符
    \d  数字[0-9]
    \D  非数字[^0-9]
    \x  十六进制数字 [0-9A-Fa-f]
    \X  费十六进制数字 [^0-9A-Fa-f]
    \l  小写字符 [a-z]
    \L  非小写字符 [^a-z]
    \u  大写字符 [A-Z]
    \U  非大写字符 [^A-Z]
    \a  字符[A-Za-z]
    \A  非字符[^A-Za-z]
    []  任何[]中的字符
    
  • 更多

    :help pattern
    

折叠

  • 折叠方式

    manual  手工定义折叠
    indent  更多的缩进表示更高级的折叠
    expr    用表达式来定义折叠
    syntax  用语法高亮来定义折叠
    diff    对没有更改的文本进行折叠
    marker  对文中的标志折叠
    set foldmethod=****   设置折叠方式
    marker方式,需要用标记来标识代码的折叠,系统默认是 {{{和}}}
    
  • 折叠命令

    zc      折叠
    zC      对所在范围内所有嵌套的折叠点进行折叠
    zo      展开
    zO      对所在范围内所有嵌套的折叠点展开
    zr, zR  折叠所有
    zm, zM  展开所有
    za, zA  折叠/打开当前折叠
    zi      折叠/展开所有
    [z      到当前打开的折叠开始处
    ]z      到当前打开的折叠末尾处
    zj      向下移动到下一个折叠开始处
    zk      向上移动到前一折叠的结束处
    zf      创建折叠
    zf56G   创建从当前行起到 56行的代码折叠
    10zf    创建从当前行起后 10行的代码折叠
    10zf-   创建从当前行起到之前 10行的代码折叠
    zf%     创建从当前行起到对应匹配的括号
    zd      删除光标下的折叠,仅当 manual或marker 方式有效
    zD      嵌套地删除光标下的折叠,仅当 manual或marker 方式有效
    zE      除去窗口里的所有折叠,仅当 manual或marker 方式有效
    
  • foldlevel

    'foldlevel' 是个数值选项:数字越大则打开的折叠更多
    当 'foldlevel' 为 0 时,所有的折叠关闭
    当 'foldlevel' 为正数时,一些折叠关闭
    当 'foldlevel' 很大时,所有的折叠打开
    'foldlevel' 的改变后立即生效。之后,折叠可以被手动地打开和关闭
    

文件

  • 文件操作

    :w    保存
    :w!   强制保存
    :w filename        将当前缓冲区的内容保存成文件 filename
    :n1, n2, filename  将n1到 n2的内容保存为文件filename
    :q    退出当前窗口,若改动,提示失败
    :q!   强制退出,放弃改动
    :wq   保存后退出
    :wa   保存所有
    :qa   退出所有
    :wqa  保存所有后退出
    ZZ    相当于:wq
    
  • 编辑另一个文件

    :edit file
    
  • 多文件编辑

    vim filename1 filename2 ...
    :bn  跳转至下一缓冲区 (文件)( 最后一个 ->第一个)
    :bN  跳转到上一缓冲区 (文件)( 第一个->最后一个 )
    :bd  关闭当前缓冲区 (文件)
    :n   跳转至下一文件 ,如当前文件为最后一个,提示错误
    :N   跳转至上一文件 ,如当前文件为第一个,提示错误
    :next, :previous    跳转至下 /上一文件
    :wnext, :wprevious  保存当前文件并跳转至下 /上一文件
    :last, :first       跳转至最后一个 /第一个文件
    :files   列出当前已打开文件
    :args    给出进入 vim时命令行参数;当前正在编辑文件名用 "[]"列出
    
  • 窗口分隔

    s  水平分割窗口
    v  垂直分割窗口
    w  切换至另一窗口
    h  切换至左侧窗口
    j  切换至下方窗口
    k  切换至上方窗口
    l  切换至右侧窗口
    H  移动当前窗口到左边
    J  移动当前窗口到下面
    K  移动当前窗口到上面
    L  移动当前窗口到右边
    :split filename    水平分隔窗口打开 filename
    :vsplit filename   垂直分割窗口打开 filename
    
  • 标签式编辑

    :tabnew filename  在新标签中打开
    gt, :tabnext      切换至下一个标签
    gT, :tabprevious  切换至上一个标签
    :tabc             关闭当前标签
    :tabl             切换至最后一个标签
    :tabmove n        切换到第 n个标签,默认标签编号从 0开始
    
  • 目录

    netrw 插件

    netrw 插件是vim的标准插件,在 .vimrc中只要设置了
    set nocp " 不与vi兼容
    filetype plugin on " 允许插件
    就可以使用 netrw插件了 
    

    打开目录

    Ex[plore]   打开当前目录或指定目录
    Se[xplore]  水平分割并打开当前目录或指定目录
    Ve[xplore]  垂直分割并打开当前目录或指定目录
    Te[xplore]  新建标签并打开当前目录或指定目录
    

    目录操作

       进入目录
      试图删除文件 /目录
    -      上一级目录
    a      在正常显示,隐藏和显示三种方式间切换
    c      使浏览中的目录成为当前目录
    d      建立目录
    D      试图删除目录
    i      在瘦、长、宽、和树形的各种列表中切换
      刷新目录列表
    o      打开新浏览窗口,进入光标所在目录,使用水平分割
    p      预览文件
    P      在前一次使用的窗口里预览
    r      反转排序顺序
    R      给指定文件 /目录换名
    s      选择排序方式:按名字、时间、文件大小排序
    S      指定按名字排序的后缀优先级
    t      在新标签页里打开光标所在文件 /目录
    v      打开新浏览窗口,进入光标所在目录,使用垂直分割
    

  • 创建宏

    q +  + [一系列命令] + q
     指用户自定义的 a-z中的一个寄存器
    如:qa...q
    
  • 运行宏

    @ +     运行寄存器中的宏
    @@                重复运行上一次宏
    10@a              重复运行寄存器 a中的宏10 次
    
    

MAP

  • 映射模式

    普通模式
    可视模式
    操作符等待模式
    插入模式
    命令行模式
    
  • 映射模式代号

      普通、可视和选择、操作符等待
    n        普通
    v        可视和选择
    s        选择
    x        可视
    o        操作符等待
    !        插入和命令行
    i        插入
    l        插入、命令行和 Lang-Arg模式的":lmap" 映射
    c        命令行
    
  • 命令

    map {lhs} {rhs} 把普通、可视和选择、操作符等待模式下的 lhs命令映射成rhs,如:map tn :tabnew
    noremap      noremap对rhs不会重新扫描映射
    unmap {lhs}  取消对lhs的映射
    mapclear     取消所有 map映射
    nmap         只作用于普通模式下的映射
    imap         只作用于插入模式下的映射
    nnoremap     只作用于普通模式下的 noremap
    nunmap       只作用于普通模式下的 unmap
    nmapclear    只作用于普通模式下的 mapclear
    
  • 特殊参数

    , , , 
                        
                        

你可能感兴趣的:(vim)