zoukankan      html  css  js  c++  java
  • vim的几种模式mode和按键映射map

    vim里最基本的map用法也就是

    :map c a
    

    这里把c映射成了a,在map生效的情况下,按下c就等同于按下了a
    当然,常用的Ctrl,Shift,Alt自然也是支持的。

      • 令Ctrl+a对应到a
    :map  a
    
      • 令Alt+a对应到a
    :map  a
    
      • 令Ctrl+Alt+a对应到a
    :map  a
    

    到此,我们已经可以做很多事情了。
    但是map命令远不只这一种,在不同的模式下,同一组按键可以被映射到不同的组合上。
    Vim的模式众多,但是一般被提及的也就是这么几种:

      1. Normal Mode

    也就是最一般的普通模式,默认进入vim之后,处于这种模式。

    Visual Mode

    一般译作可视模式,在这种模式下选定一些字符、行、多列。
    在普通模式下,可以按v进入。

    Insert Mode

    插入模式,其实就是指处在编辑输入的状态。普通模式下,可以按i进入。

    Select Mode

    在gvim下常用的模式,可以叫作选择模式吧。用鼠标拖选区域的时候,就进入了选择模式。
    和可视模式不同的是,在这个模式下,选择完了高亮区域后,敲任何按键就直接输入并替换选择的文本了。
    和windows下的编辑器选定编辑的效果一致。普通模式下,可以按gh进入。

    Command-Line/Ex Mode

    就叫命令行模式和Ex模式吧。两者略有不同,普通模式下按冒号(:)进入Command-Line模式,可以输入各种命令,
    使用vim的各种强大功能。普通模式下按Q进入Ex模式,其实就是多行的Command-Line模式。

    对于Map,有几个基本的概念

      • 命令的组合

    同Vim下的其他命令一样,命令的名字往往由好几段组成。前缀作为命令本身的修饰符,微调命令的效果。
    对于map而言,可能有这么几种前缀

      • nore

    表示非递归,见下面的介绍

      • n

    表示在普通模式下生效

      • v

    表示在可视模式下生效

      • i

    表示在插入模式下生效

      • c

    表示在命令行模式下生效

      • Recursive Mapping

    递归的映射。其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b。

    :map a b
    :map c a
    

    对于c效果等同于

    :map c b
    

    默认的map就是递归的。如果遇到[nore]这种前缀,比如:noremap,就表示这种map是非递归的。

      • unmap

    unmap后面跟着一个按键组合,表示删除这个映射。

    :unmap c
    

    那么在map生效模式下,c不再被映射到a上。

    同样,unmap可以加各种前缀,表示影响到的模式。

      • mapclear

    mapclear直接清除相关模式下的所有映射。
    同样,mapclear可以加各种前缀,表示影响到的模式。

    这里列出常用的一些map命令,默认map命令影响到普通模式和可视模式。

    详细查看 :help map-overview:

         COMMANDS                    MODES ~
    :map   :noremap  :unmap     Normal, Visual, Select, Operator-pending
    :nmap  :nnoremap :nunmap    Normal
    :vmap  :vnoremap :vunmap    Visual and Select
    :smap  :snoremap :sunmap    Select
    :xmap  :xnoremap :xunmap    Visual
    :omap  :onoremap :ounmap    Operator-pending
    :map!  :noremap! :unmap!    Insert and Command-line
    :imap  :inoremap :iunmap    Insert
    :lmap  :lnoremap :lunmap    Insert, Command-line, Lang-Arg
    :cmap  :cnoremap :cunmap    Command-line


    字母代表含义:

    'n' (for normal), 'v' (for visual and select), 'c' (for command), 'x' (for visual mode), 's' (for select), 'o' (for operator pending).

    可以试试这些命令

    1. 命令行模式下建一个mapping
       nmap b a 
    2. 现在普通模式下,按b,可以进入插入模式,随便输入一些字符
    3. 命令行模式下建一个mapping
       vmap b d 
    4. 现在普通模式下,按V,进入了可视模式,并且选定了一整行,按下b,可以删除整行
    5. 命令行模式下建一个mapping
       imap b a 
    6. 现在试着给正在编辑的这个文件输入一个字符”b”吧 :p
    7. 命令行模式下建一个mapping
       cmap b c 
    8. 命令行模式下, 按下b,会出来一个a

    如果vim的按键已经被你弄得乱七八糟了,试着用unmap和mapclear清除这些mapping,  或者用noremap 来中断递归执行.

  • 相关阅读:
    kubernetes获取Pod内容器信息
    etcd空间配额2G限制优化
    kubernetes集群之GC处理
    kubernetes之statefulset控制器介绍
    基于MySQL Binlog的Elasticsearch数据同步实践
    Nacos
    Python最佳工程实践,建立一个完美的工程项目
    图数据库的内部结构 (NEO4j)
    5个用/不用GraphQL的理由
    Neo4J 查找两节点之间的路径
  • 原文地址:https://www.cnblogs.com/sunsky303/p/13522437.html
Copyright © 2011-2022 走看看