【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 命令来取消任何现有的映射。

相关推荐
CSND7403 天前
Ubuntu vi(vim)编辑器配置一键补全main函数
linux·c语言·ubuntu·编辑器·vim
susu10830189115 天前
vi或vim进行替换
linux·编辑器·vim
Hu_go__5 天前
vim的使用
linux·编辑器·vim
计算小屋6 天前
Vim 使用基本操作总结
编辑器·vim·excel
云计算DevOps-韩老师7 天前
【网络云计算】2024第50周-每日【2024/12/13】小测-理论-写10个Bash Shell脚本-解析
运维·网络·云计算·vim·bash·负载均衡·perl
蓝影铁哥8 天前
Linux实操篇-远程登录/Vim/开机重启
java·linux·运维·spring boot·spring·vim
大隐隐于野8 天前
vimdc
vim
让学习成为一种生活方式8 天前
常用vim命令行-linux008
编辑器·vim·excel
果汁分你一半l10 天前
day3 构造数据类型,数据结构基础
c语言·数据结构·vim
qq_3775727710 天前
vim save
linux·vim