【vim 学习系列文章 20 -- 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

相关推荐

  1. vim 学习系列文章 16 -- vim 自动保存设置】

    2024-04-11 12:12:04       40 阅读
  2. vim 学习系列文章 5.1 -- vim ctags 使用】

    2024-04-11 12:12:04       27 阅读
  3. Spring MVC 返回哪些

    2024-04-11 12:12:04       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-11 12:12:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 12:12:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 12:12:04       87 阅读
  4. Python语言-面向对象

    2024-04-11 12:12:04       96 阅读

热门阅读

  1. LVS NAT、DR、FULL-NAT 模式介绍

    2024-04-11 12:12:04       35 阅读
  2. 浅入浅出容器化部署

    2024-04-11 12:12:04       38 阅读
  3. 访问网站时IP被阻止?解决方法

    2024-04-11 12:12:04       57 阅读
  4. 解决moviepy保存的视频画质不清晰问题

    2024-04-11 12:12:04       38 阅读
  5. 4.9

    4.9

    2024-04-11 12:12:04      38 阅读
  6. 使用 IEEE (1735) Verilog 标准机制进行 IP 保护

    2024-04-11 12:12:04       41 阅读
  7. ISBN 正则表达式及代码示例

    2024-04-11 12:12:04       39 阅读
  8. Leetcode-1702-修改后的最大二进制字符串-c++

    2024-04-11 12:12:04       42 阅读
  9. vue监听键盘回车事件的三种方法

    2024-04-11 12:12:04       32 阅读
  10. 学习基于pytorch的VGG图像分类 day3

    2024-04-11 12:12:04       37 阅读