【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."
  else
    echo "Called from another mode: " . a:mode
  endif
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=White
  elseif a:mode == 'n'
    hi StatusLine cterm=bold ctermbg=Red ctermfg=White
  elseif a:mode == 's'
    hi StatusLine cterm=bold ctermbg=Cyan ctermfg=White
  endif
endfunction

autocmd 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统架构最佳实践 -- 构建高效教学平台系统

随着在线教育的迅速发展&#xff0c;教学平台系统成为了教育行业不可或缺的一部分。本文将总结构建高效教学平台系统的关键要素&#xff0c;并介绍最佳实践&#xff0c;以帮助教育机构和企业打造具有竞争力的教学平台系统。 引言&#xff1a; 随着信息技术的不断进步和普及&…

CMake 学习笔记2

其他很好的总结 CMake教程系列-01-最小配置示例 - 知乎 CMake 保姆级教程&#xff08;上&#xff09; | 爱编程的大丙 10-补充(完结)_哔哩哔哩_bilibili 1、基本关键字 SET命令的补充 &#xff08;1&#xff09;SET命令设置执行标准 #增加-stdc11 set(CMAKE_CXX_STANDARD…

如何使用Docker部署Django项目?

第一步&#xff1a;创建Dockerfile文件 在django项目的根目录中创建一个名为Dockerfile的文件&#xff0c;并写入如下配置&#xff1a; # 使用 Python 3.12 作为基础镜像 FROM python:3.12# 设置工作目录 WORKDIR /app# 复制项目文件到工作目录 COPY . /app# 设置清华 pip 镜…

LeetCode 1 in Python. Two Sum (两数之和)

两数之和算法思想很简单&#xff0c;即找到nums[i]和nums[j]target-(nums[i])返回[I, j ]即可。问题在于&#xff0c;简单的两层遍历循环时间复杂度为O()&#xff0c;而通过构建一个hash表就可将时间复杂度降至O(n)。本文给出两种方法的代码实现。 示例&#xff1a; 图1 两数之…

【数据结构与算法】:二叉树经典OJ

目录 1. 二叉树的前序遍历 (中&#xff0c;后序类似)2. 二叉树的最大深度3. 平衡二叉树4. 二叉树遍历 1. 二叉树的前序遍历 (中&#xff0c;后序类似) 这道题的意思是对二叉树进行前序遍历&#xff0c;把每个结点的值都存入一个数组中&#xff0c;并且返回这个数组。 思路&…

2023年度编程语言将花落谁家

2023年度编程语言将花落谁家 TIOBE的预测你预测年度最受欢迎的编程语言会是什么&#xff1f;TIOBE 认为 C# 最有可能成为年度编程语言&#xff0c;你同意吗&#xff1f;为什么&#xff1f;AI时代已经到来&#xff0c;你有学习新语言的打算吗&#xff1f; 以下是来自年度编程语言…

我与C++的爱恋:类与对象(二)

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​ 本篇着重介绍构造函数和析构函数&#xff0c;剩余内容在下篇解答。 一、类的默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 任何类在什么都不写时…

PostgreSQL入门到实战-第二十六弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(一)官网地址PostgreSQL概述PostgreSQL中GROUP BY命令理论PostgreSQL中GROUP BY命令实战更新计划 PostgreSQL中数据分组操作(一) 如何使用PostgreSQL GROUP BY子句将行分组。 官网地址 声明: 由于操作系统, 版本更新等原因, 文…

力扣 | 24. 两两交换链表中的节点

两两交换链表中的节点 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 输入&#xff1a;head 1->2->3->4->5->NULL 输出&#xff1a;2->1-&g…

缓存相关知识总结

一、缓存的作用和分类 缓存可以减少数据库的访问压力&#xff0c;提升整个网站的数据访问速度&#xff0c;改善数据库的写入性能。缓存可以分为两种&#xff1a; 缓存在应用服务器上的本地缓存&#xff1a;访问速度快&#xff0c;但受应用服务器内存限制 缓存在专门的分布式缓存…

区块链媒体推广的8个成功案例解析-华媒舍

区块链领域作为一个新兴行业&#xff0c;媒体推广对于项目的成功发展起着至关重要的作用。本文将从八个成功案例中来分析区块链媒体推广的重要性和成功策略。 1. 媒体报道对于区块链项目的重要影响 媒体报道是提升区块链项目知名度和用户认可度的重要手段。对于区块链项目来说…

C/C++基础----常量和基本数据类型

HelloWorld #include <iostream>using namespace std;int main() {// 打印cout << "Hello,World!" << endl;return 0; }c/c文件和关系 c和c是包含关系&#xff0c;c相当于是c的plus版本c的编译器也可以编译c语言c文件.cpp结尾.h为头文件.c为c语言…

Coursera吴恩达《深度学习》课程总结(全)

这里有Coursera吴恩达《深度学习》课程的完整学习笔记&#xff0c;一共5门课&#xff1a;《神经网络和深度学习》、《改善深层神经网络》、《结构化机器学习项目》、《卷积神经网络》和《序列模型》&#xff0c; 第一门课&#xff1a;神经网络和深度学习基础&#xff0c;介绍一…

InnoDB的使用限制有哪些

InnoDB的使用限制有哪些 以下是一些使用InnoDB在使用中的限制&#xff0c;包含InnoDb表&#xff0c;索引&#xff0c;表空间&#xff0c;和InnoDB存储引擎其他方面的各种限制。 一个表最多包含1017列字段&#xff0c;虚拟生成的列也包含在这个限制中。 每个表的元数据需要在…

2024连锁收银系统哪个好 有什么特点

在服装连锁店的经营中&#xff0c;选择一款优秀的收银系统至关重要。收银系统不仅仅是简单的结账工具&#xff0c;更是管理销售、库存和客户信息的关键平台。以下将介绍几款优秀的服装连锁店收银系统&#xff0c;以便您更好地了解各款系统的特点和优势。 1. 商淘云连锁店收银系…

150个 HTML5 网站模版 量大慢选

HTML5 网站模版 No.1 HTML5 网站模版 No.1

Python实现外观模式、桥接模式、组合模式和享元模式

今天介绍四种结构型设计模式&#xff1a;外观模式、桥接模式、组合模式和享元模式 外观模式 外观模式&#xff08;Facade Pattern&#xff09;&#xff0c;它为子系统提供一个统一的接口&#xff0c;使得子系统更加容易使用。 在Python中&#xff0c;我们可以通过定义一个外…

CSS之固定定位、相对定位、绝对定位

一、相对定位 相对元素自身所在的原来的位置进行定位&#xff0c;可以设置 left&#xff0c;right&#xff0c;top&#xff0c;bottom四个属性。 效果&#xff1a;在进行相对定位以后&#xff0c;元素原来所在的位置被保留了&#xff0c;既保留占位&#xff0c;其他元素的位置…

GPT演变:从GPT到ChatGPT

Transformer 论文 Attention Is All You Need The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder… https://arxiv.o…

Linux系统——Elasticsearch企业级日志分析系统

目录 前言 一、ELK概述 1.ELK简介 2.ELK特点 3.为什么要使用ELK 4.完整日志系统基本特征 5.ELK工作原理 6.Elasticsearch介绍 6.1Elasticsearch概述 6.2Elasticsearch核心概念 7.Logstash介绍 7.1Logstash简介 7.2Logstash主要组件 8.Kibana介绍 8.1Kibana简介 …