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

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


文章目录

    • [a:mode 的值有哪些?](#a:mode 的值有哪些?)
      • 举例
      • [Vim 底部状态栏设置](#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 的终端模式下运行。

举例

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

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 作为触发快捷键:

vim 复制代码
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配置文件后,在里面添加下面这一段代码就行了:

bash 复制代码
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

相关推荐
Slow菜鸟1 天前
AI学习篇(三) | AI效率工具指南(2026年)
人工智能·学习
qcwl661 天前
深入理解Linux进程与内存 学习笔记#4
笔记·学习
蒸蒸yyyyzwd1 天前
后端学习笔记 day4
linux·笔记·学习
笨笨饿1 天前
20_Git 仓库使用手册 - 初学者指南
c语言·开发语言·嵌入式硬件·mcu·学习
cqbelt1 天前
Python 并发编程实战学习笔记
笔记·python·学习
智算菩萨1 天前
【论文复现】Applied Intelligence 2025:Auto-PU正例无标签学习的自动化实现与GPT-5.4辅助编程实战
论文阅读·python·gpt·学习·自动化·复现
老神在在0011 天前
【Selenium 自动化精讲】浏览器弹窗与登录界面的本质区别 & 实操指南
javascript·学习·selenium·测试工具·自动化
·醉挽清风·1 天前
学习笔记—Linux—信号阻塞&信号捕捉
linux·笔记·学习
AnalogElectronic1 天前
uniapp学习5,兼容微信小程序的俄罗斯方块游戏
学习·微信小程序·uni-app
知识分享小能手1 天前
MongoDB入门学习教程,从入门到精通,MongoDB应用程序设计知识点梳理(9)
数据库·学习·mongodb