当前位置: 首页 > news >正文

【vim 学习系列文章 7-- vim vnormap nnoremap nmap map inoremap 区别】

文章目录

    • 1.1 vim 递归映射和非递归映射
      • 1.1.1 vim 可视模式
    • 1.2 map nmap vnormap nnoremap inoremap 区别

1.1 vim 递归映射和非递归映射

递归映射和非递归映射是 Vim 中两种不同的键盘映射方式。
递归映射(recursive map)是指在定义键盘映射时,映射的右侧的命令会触发其他映射。例如,假设你已经有一个映射 map j dd,它将 j 键映射为删除一行的命令。然后你又定义了一个新的映射 map k j,它将 k 键映射为 j 命令。当你按下 k 键时,由于使用的是递归映射,j 命令会触发 jdd 的映射,所以结果是删除一行。

非递归映射(non-recursive map)是指在定义键盘映射时,映射的右侧的命令不会触发其他映射。还是以上面的例子为例,如果你使用的是非递归映射,例如 nnoremap k j,那么当你按下 k 键时,j 命令不会触发其他映射,所以结果是将光标向下移动一行,而不是删除一行。

在大多数情况下,使用非递归映射是更好的选择,因为它可以避免可能的循环和混淆。在 Vim 中,你可以使用 mapnoremap 来定义递归映射和非递归映射,例如 nmapnnoremap 分别用于在普通模式下定义递归映射和非递归映射。

1.1.1 vim 可视模式

Vim 的可视模式是 Vim 的三种主要模式之一,另外两种是普通模式和插入模式。在可视模式下,你可以选择文本块并对其执行操作,类似于其他文本编辑器中的选择并操作的工作方式。

你可以通过以下方式进入可视模式:

  • v:字符可视模式。在普通模式下按 v 将进入字符可视模式,在这个模式下,你可以通过移动光标来选择文本。

  • V:行可视模式。在普通模式下按 V 将进入行可视模式,在这个模式下,你可以通过上下移动光标来选择整行文本。

  • :块可视模式。在普通模式下按 将进入块可视模式,在这个模式下,你可以通过移动光标来选择一个文本块。

在可视模式下选择文本后,你可以执行各种命令,比如复制 (y)、粘贴 (p)、删除 (d) 或者修改 (c)。

例如,你可以进入行可视模式 (V), 选择几行文本,然后按 d 来删除这些行,或者按 y 来复制这些行。

因此,Vim 的可视模式提供了一种直观的方式来选择和操作文本。

1.2 map nmap vnormap nnoremap inoremap 区别

Vim 使用了一种强大的键盘映射系统,可以让你自定义或修改键盘命令。以下部分将详细解释和示例 vmap, nmap, map, nnoremap, inoremap。

  • vmap:在可视模式下创建键盘映射。例如,vmap <F2> y 在可视模式下将 F2 键映射为复制命令。

  • nmap:在普通模式下创建键盘映射。例如,nmap <F2> :w<CR> 在普通模式下将 F2 键映射为保存文件的命令。

  • map:在普通、可视和操作符等待模式下创建键盘映射。例如,map <F2> :w<CR> 在这些模式下将 F2 键映射为保存文件的命令。

  • nnoremap:在普通模式下创建非递归键盘映射。非递归映射意味着映射的右侧的命令不会再触发其他映射,从而避免了可能的循环。例如,nnoremap j gjj 键映射为 gj 命令,即使 gj 也被映射到其他命令,j 键仍然只会执行 gj 命令。

  • inoremap:在插入模式下创建非递归键盘映射。例如,inoremap jj <Esc>jj 映射为 Esc 命令,这意味着你可以通过输入 jj 来退出插入模式,而不需要按 Esc 键。

这些命令都可以在 vimrc 文件中设置,或者在 Vim 的命令模式下输入以立即生效。记住,为了避免映射冲突或无法预料的结果,最好在创建新的键盘映射之前,先使用 unmap 命令来取消任何现有的映射。

http://www.lryc.cn/news/191095.html

相关文章:

  • [ERROR] COLLATION ‘utf8_unicode_ci‘ is not valid for CHARACTER SET ‘latin1‘
  • 基于rancher安装部署k8s
  • 保姆级微服务部署教程
  • springboot 定时任务
  • 【大数据】HBase入门指南
  • 零售数据分析模板鉴赏-品类销售结构报表
  • 竞赛 深度学习 机器视觉 车位识别车道线检测 - python opencv
  • MySQL中使用函数会使索引失效?
  • 金和OA C6任意文件读取漏洞 复现[附POC]
  • IP地址技术原理
  • 【网络安全】密码学基础
  • AWS AD Connector 的网络配置
  • kafka详解(三)
  • [Spring] SpringMVC 简介(二)
  • idea一些不太常用但是能提升编码效率的快捷键
  • vsto word属性信息 并读取
  • android之TextView自由选择复制
  • 【mysql】 bash: mysql: command not found
  • 鲲山科技:引入和鲸 ModelWhale,实现量化策略的高效迭代
  • PFSK152 3BSE018877R1 有源滤波器的定义
  • WebDAV之π-Disk派盘 + 恒星播放器
  • 亚马逊,速卖通,敦煌产品测评补单攻略:低成本、高安全实操指南
  • 常用linux解压命令
  • TensorFlow入门(二十二、梯度下降)
  • WPF中的多重绑定
  • 区块链在游戏行业的应用
  • uniapp快速入门系列(4)- 微信小程序开发
  • Kafka保证消息幂等以及解决方案
  • 接口测试用例设计
  • wireshark抓rtp包,提取出H265裸流数