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

文章目录

    • [1.1 vim 递归映射和非递归映射](#1.1 vim 递归映射和非递归映射)
      • [1.1.1 vim 可视模式](#1.1.1 vim 可视模式)
    • [1.2 map nmap vnormap nnoremap inoremap 区别](#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 命令来取消任何现有的映射。

相关推荐
wydxry6 小时前
vim教程
vim
vortex514 小时前
Vim 编辑器学习笔记
学习·编辑器·vim
许嵩661 天前
IC 脚本之VIM 记录
linux·编辑器·vim
m0_519523103 天前
Linux——简单认识vim、gcc以及make/Makefile
linux·运维·vim
Daorigin_com3 天前
如何从数字化迈向智能化的跨越,重塑企业合同管理的未来
搜索引擎·计算机视觉·数据挖掘·vim·信号处理·sklearn·测试覆盖率
fll9802053 天前
配置修改Vim编辑器中TAB键的缩进长度
linux·编辑器·vim
励志成为嵌入式工程师4 天前
c语言归并排序
c语言·算法·vim·排序算法
fchyang4 天前
远程终端vim里使用系统剪切板
linux·编辑器·vim
前端青山5 天前
Node.js 全栈开发进阶篇
linux·开发语言·前端·node.js·编辑器·vim
qq_441996055 天前
JDK 安装、环境变量配置、nano 和 vim 的使用
java·开发语言·vim