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

【vim 学习系列文章 20 -- a:mode 的值有哪些?】


请阅读【嵌入式开发学习必备专栏 之 Vim】


文章目录

    • a:mode 的值有哪些?
      • 举例
      • Vim 底部状态栏设置

a:mode 的值有哪些?

在 Vim 脚本语言中,a:mode 常常用于函数内部,以获取该函数被调用时 Vim 正处于的模式。它主常用于那些可以从不同模式下被调用的函数中,比如映射到多个模式的快捷键触发的函数。这样,函数就可以根据不同的模式执行不同的操作。
a:mode 的可能值主要对应于 Vim 的几种基本模式,每个值都代表 Vim 此时的一个特定状态:

  • n:普通模式 (Normal)。最常用的 Vim 模式,用于浏览和编辑。
  • v:可视模式 (Visual)。用于选择文本块。
  • o:可视行模式 (Visual Line)。这是可视模式的一种特殊情况,按行选择。
  • V:可视块模式 (Visual Block)。另一种可视模式,允许按矩形块选择文本。
  • i:插入模式 (Insert)。用于输入文本。
  • c:命令行模式 (Command)。在执行命令时的模式。
  • s:选择模式 (Select)。类似于可视模式,但是行为略有区别,比如按键直接插入文本。
  • t:终端模式 (Terminal)。在 Vim 的终端模式下运行。

举例

假设你想创建一个函数,该函数的行为会根据它被调用时的模式而改变。以下是一个简单的例子:

function! DoSomethingBasedOnMode()if a:mode == 'n'echo "Called from Normal mode."elseif a:mode == 'i'echo "Called from Insert mode."elseif a:mode == 'v'echo "Called from Visual mode."elseecho "Called from another mode: " . a:modeendif
endfunction

然后,你可以创建一个映射,让这个函数可以从不同的模式下被调用,这里使用 <Leader>d 作为触发快捷键:

nnoremap <Leader>d :call DoSomethingBasedOnMode()<CR>
vnoremap <Leader>d :<C-u>call DoSomethingBasedOnMode()<CR>
inoremap <Leader>d <Esc>:call DoSomethingBasedOnMode()<CR>

这样,无论你处于普通、插入还是可视模式,当你按下 <Leader>d 时,DoSomethingBasedOnMode 函数都会被调用,并且根据当前的模式,打印出相应的信息。注意,插入模式下的映射会先退出插入模式,因为 a:mode 不直接传递给函数,而是通过这些映射的上下文来确定调用函数时的模式。

Vim 底部状态栏设置

在vim中输入::e $MYVIMRC,打开vimrc配置文件后,在里面添加下面这一段代码就行了:

function! InsertStatuslineColor(mode)if a:mode == 'i'hi StatusLine cterm=bold ctermbg=Green ctermfg=Whiteelseif a:mode == 'n'hi StatusLine cterm=bold ctermbg=Red ctermfg=Whiteelseif a:mode == 's'hi StatusLine cterm=bold ctermbg=Cyan ctermfg=Whiteendif
endfunctionautocmd InsertEnter * call InsertStatuslineColor('i')
autocmd InsertLeave * call InsertStatuslineColor('n')set statusline=%{mode()}\ %F%m%r%h%w%=(%{&ff}/%Y)\ (line\ %l/%L,\ col\ %c)

效果:
在这里插入图片描述

推荐阅读:
https://www.zhihu.com/question/24926908/answer/3026884403

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

相关文章:

  • sed命令多行处理
  • Secure Copy Protocol or SCP - 安全拷贝协议
  • Java面试题:什么是Java的值传递和引用传递?列举其应用场景,并说明其特点
  • Java 基于微信小程序的智能停车场管理小程序
  • python基础——类型注解【变量,函数,Union】
  • 人工智能研究生前置知识—科学计算库numpy
  • element UI 设置type=“textarea“ 禁止输入框缩放
  • Rust腐蚀服务器常用参数设定详解
  • 无人机巡检技术革命性变革光伏电站运维管理
  • 【学习】软件信创测试中,如何做好兼容性适配
  • 阿里云ACK k8s集群迁移
  • 1.3 字符设备驱动
  • 计算机毕业设计springboot小区物业报修管理系统m8x57
  • 深度学习体系结构——CNN, RNN, GAN, Transformers, Encoder-Decoder Architectures算法原理与应用
  • js 数字的常用方法梳理
  • STM32H743VIT6使用STM32CubeMX通过I2S驱动WM8978(5)
  • Objective-C学习笔记(block,协议)4.10
  • AD7982BRMZRL7 二进制 500kSPS 模数转换芯片 ADI
  • 采集某新闻网资讯网站保存PDF
  • 03攻防世界-unserialize3
  • 蓝桥杯备考随手记: 常见的二维数组问题
  • Java | Leetcode Java题解之第28题找出字符串中第一个匹配项的下标
  • 【数据结构与算法】:二叉树经典OJ
  • uniapp——长按识别二维码
  • 云服务器环境web环境搭建之JDK、redis、mysql
  • 第1章 计算机网络体系结构
  • Docker之自定义镜像上传至阿里云
  • 《深入Linux内核架构》第2章 进程管理和调度 (2)
  • (四)PostgreSQL的psql命令
  • 前端使用minio传输文件