Vim中的按键映射

本文最后更新于2015年7月6日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

缘由:

今天在整理/编辑自己的Vim的配置文件/etc/vimrc时,在网上看到的一些不错的vimrc配置文件中发现了自定义的mapping:

  • nmap
  • imap
  • vmap
  • map
  • nnoremap

之前听说过Vim的按键映射,自己也用过一些,不过一直都没有较为深入的了解过,这次趁着整理vimrc的机会学习一下Vim的map设置。

搜索关键字:
  • Linux vim map nnoremap
  • linux vim 共享剪贴板
  • linux vim 格式化
  • linux vim配置文件
  • Linux vim multi tab
参考链接:
参考解答:

There are six sets of mappings

  1. For Normal mode: When typing commands.
  2. For Visual mode: When typing commands while the Visual area is highlighted.
  3. For Select mode: like Visual mode but typing text replaces the selection.
  4. For Operator-pending mode: When an operator is pending (after “d”, “y”, “c”, etc.).  See below: |omap-info|.
  5. For Insert mode.  These are also used in Replace mode.
  6. For Command-line mode: When entering a “:” or “/” command.

Vim有6种映射集合,但只要了解最基本的3种,基本上就可以满足日常应用了。

  1. Normal mode (常态模式)

运行Vim后进入的就是Normal模式,在这种模式下可以移动鼠标、寻找、替换、编辑指令,但不能输入文字——这与其它编辑器有很大的差别。

  1. Insert mode (插入模式)

在Insert 模式下,可以像在其它编辑器中一样输入文字。此时左下角状态列会有“-INSERT-”(-插入-)字样。在Normal模式按下下面的键可以进入Insert 模式:i (在当前字符的前面插入);a (在当前字符的后面插入);o (在当前行的后面添加新的一行);O (在当前行的上面添加新的一行)。

  1. Visual mode (反白模式)

在Visual 模式下可以把文字反白起来,此时左下角状态栏会有“-VISUAL-”或“-VISUAL LINE-”或“-VISUAL BLOCK-”字样。在Normal模式下按v或V或Ctrl-v(有什么差别呢?按下v是进入字符选取的virtual模式;按下V是进入行选择的virtual line模式;按下Ctrl-v是进入块选择的virtual block模式)可以进入Visual 模式。

不管是在Insert模式或Visual模式或其它的什么模式,按Esc键都可以返回Normal模式。


按键映射

nmap:映射一个Normal模式下的键,只有在Normal模式这个命令才会生效。

imap:映射一个Insert 模式下的键,只有在Insert 模式这个命令才会生效。

vmap:映射一个Visual模式下的键,只有在Visual模式这个命令才会生效。

==

默认情况下Vim的map映射是递归进行的,除非你显示指定noremap:

:map and :noremap are recursive and non-recursive versions of the various mapping commands.

具体解释如下:

当你按下j时会被映射到gg,按下Q时也会被映射到gg(先映射到j,然后映射到gg),因为Vim在默认情况下map映射是递归进行的;当你按下W时会被映射到j但不会被继续映射到gg,因为这里我们显示指定了noremap非递归映射。

==常用的Vim按键映射==

=Update below=

后来,有看到了几篇介绍Vim的mapleader的文章,试了试,果然效率大有提升,遂更新vimrc设置如下:

=EOF=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2305.html

《Vim中的按键映射》上有3条评论

  1. CVE-2019-12735:Linux Vim/Neovim编辑器任意代码执行漏洞
    https://www.4hou.com/vulnerable/18598.html
    https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md

    研究人员发现Vim 8.1.1365之前版本和Neovim 0.3.6都存在任意代码执行漏洞。研究人员分析发现通过打开伪造的文本文件通过modelines功能来执行任意代码。

    补丁
    Vim patch 8.1.1365
    Neovim patch (released in v0.3.6)

    除了补丁以外,研究人员建议在vimrc 中禁用modelines(方法为:set nomodeline)或禁用modelineexpr来禁止modeline中的表达式。

    打开vim输入:set modeline?检查modelines是否启用。如果vim返回nomodeline,就说明不存在漏洞。如果有漏洞,或想要确保该问题的安全性,可以在vimrc中加入以下代码:
    set modelines=0
    set nomodeline

发表评论

电子邮件地址不会被公开。 必填项已用*标注