当vim进入可视模式时运行命令

2024-05-01

我使用一个小脚本来触发插入模式以更改行号颜色:

function! CursorLineNrColorInsert(mode)
    " Insert mode: blue
    if a:mode == "i"
        highlight CursorLineNr ctermfg=4
        highlight CursorLineNr guifg=#268bd2

    " Replace mode: red
    elseif a:mode == "r"
        highlight CursorLineNr ctermfg=1
        highlight CursorLineNr guifg=#dc322f

    else
        highlight CursorLineNr ctermfg=0
        highlight CursorLineNr guifg=#073642

    endif
endfunction

autocmd InsertEnter * call CursorLineNrColorInsert(v:insertmode)
autocmd InsertLeave * highlight CursorLineNr ctermfg=0
autocmd InsertLeave * highlight CursorLineNr guifg=#073642

这工作得很好并且改变了我的行号即刻当我进入任何插入模式并恢复为正常模式下的原始颜色时。

我想对视觉模式做同样的事情:

function! CursorLineNrColorVisual(mode)
    " Visual mode: orange
    if mode()=~#"^[vV\<C-v>]"
        highlight CursorLineNr ctermfg=9
        highlight CursorLineNr guifg=#cb4b16

    else
        highlight CursorLineNr ctermfg=0
        highlight CursorLineNr guifg=#073642

    endif
endfunction

autocmd CursorMoved * call CursorLineNrColorVisual(mode())

基本上可以,但是不是立即因为该函数被触发CursorMoved。我怎么能开火CursorLineNrColorVisual() 即刻一旦我激活任何视觉模式?


在度过一段时间后:help我以以下设置结束:

" Colorize line numbers in insert and visual modes
" ------------------------------------------------
function! SetCursorLineNrColorInsert(mode)
    " Insert mode: blue
    if a:mode == "i"
        highlight CursorLineNr ctermfg=4 guifg=#268bd2

    " Replace mode: red
    elseif a:mode == "r"
        highlight CursorLineNr ctermfg=1 guifg=#dc322f

    endif
endfunction


function! SetCursorLineNrColorVisual()
    set updatetime=0

    " Visual mode: orange
    highlight CursorLineNr cterm=none ctermfg=9 guifg=#cb4b16
endfunction


function! ResetCursorLineNrColor()
    set updatetime=4000
    highlight CursorLineNr cterm=none ctermfg=0 guifg=#073642
endfunction


vnoremap <silent> <expr> <SID>SetCursorLineNrColorVisual SetCursorLineNrColorVisual()
nnoremap <silent> <script> v v<SID>SetCursorLineNrColorVisual
nnoremap <silent> <script> V V<SID>SetCursorLineNrColorVisual
nnoremap <silent> <script> <C-v> <C-v><SID>SetCursorLineNrColorVisual


augroup CursorLineNrColorSwap
    autocmd!
    autocmd InsertEnter * call SetCursorLineNrColorInsert(v:insertmode)
    autocmd InsertLeave * call ResetCursorLineNrColor()
    autocmd CursorHold * call ResetCursorLineNrColor()
augroup END

为了在离开视觉模式后恢复行号的颜色,我必须执行以下步骤:

  1. 重新映射相关键绑定以调用“输入视觉功能”
  2. 当进入视觉模式时,函数设置updatetime=0 for CursorHold events
  3. 调用“离开视觉功能”autocmd CursorHold
  4. 离开视觉模式时,该功能会重置updatetime=4000 for CursorHold events
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当vim进入可视模式时运行命令 的相关文章

随机推荐

  • 使用 OleDbConnection 读取使用 Open xml SDk 创建的 xlsx 文件

    我使用 Open Xml SDK 标准创建了 xlsx 文件 在 Excel 中打开它时 一切都很完美 我的问题是我无法使用 OleDbConnection 打开该创建的文件 但其他未创建的 xlsx 文件 OleDB 也可以打开 将很高兴
  • 通过使用 dplyr 对变量进行分组来将多列的响应制成表格

    你好 我是 plyr dplyr 系列的新手 但很喜欢它 我可以看到它对我自己的工作有巨大的实用性 但我仍在努力解决它 我有一个如下所示的数据框 1 如何为每个非分组变量生成一个表格 以显示分组变量每个值内的响应分布 2 注意 我确实有一些
  • VC++ 中的 getopt()

    我非常喜欢使用 GNUgetopt http www gnu org software libtool manual libc Getopt html 当在Linux 据我所知 getopt 在 MS VC 下不可用 Note Win32环
  • 如何将数据附加到现有 Dropbox 文件?

    我正在访问 Dropbox API 以使用 Java 上传和下载文件 现在 我需要创建一个可以将数据附加到现有 Dropbox 文件的函数 我有一个工作代码 它首先下载一个文件 然后上传它并附加文本 但是 有没有更好的方法来做到这一点 因为
  • 如何获取目标名称?

    我们知道Xcode维护着环境变量 TARGET NAME 但是如何在 Objective C 代码中访问这个变量呢 我尝试过什么 我已经添加了 TARGET NAME TARGET NAME 这位于构建设置的预处理器宏部分 但现在我不知道如
  • MSVC 常量枚举类型

    const enum Alpha X 9 Y 5 Z 2 p int main enum Alpha a b a X b Z p X p Y printf d a b p return 0 为什么 MSVC 编译器允许 p X 和 p Y
  • document.readyState == "complete" 始终为 false。状态始终是“交互的”

    我正在 Page Load 上连接一个启动脚本 JavaScript 函数来触发 如下所示 ScriptManager RegisterStartupScript Me GetType Page page init page init Tr
  • MySqlBulkLoader 说明

    你能告诉我什么吗MySqlBulkLoader的用途 在哪里以及如何使用它 一些例子也将不胜感激 请 MySQLBulkLoader是MySQL Connector Net类中的一个类 包装了MySQL语句LOAD DATA INFILE
  • 动态规划——自上而下与自下而上

    我了解到动态规划 DP 有两种 自上而下和自下而上 In top down 您可以使用递归和记忆 在自下而上 你只需填充一个数组 一个表 此外 这两种方法都使用相同的时间复杂度 就我个人而言 我发现自上而下的方法更容易 更自然地遵循 给定的
  • 从 IPConfig 获取 IP 地址,稍后在代码中使用,或保存 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 是否可以运
  • 是否可以使 CSS 网格中的每隔一行具有不同的列数?

    我有一个容器 其中包含未知数量的子级 动态填充 我在父容器上使用此代码 container display grid grid template columns repeat 3 1fr grid row gap 10rem 是否有可能以某
  • 我可以下载并安装 gacutil.exe 而无需安装 VS 或 SDK 吗?

    我希望管理员为我注册一些 DLL 但他可能不希望安装整个 SDK 他可以直接安装吗gacutil exe 如果有的话 他可以从哪里得到呢 我只需发送电子邮件至gacutil exe文件给他 他必须把它放在他的机器上哪里才能使用 我通过复制让
  • 使 Web.config 转换在本地工作

    我想让 web config 转换在本地工作 但显然这些转换仅在进行部署时发生 有谁知道一种方法来运行 msbuild 目标 TransformWebConfig 而不需要经历 重建 过程 并指定和输出目录来吐出转换后的 web confi
  • 如何获取spring data jpa中更新记录的数量?

    我使用 spring data jpa 和 hibernate 作为 jpa 持久性提供程序 我在我的应用程序中使用本机查询 有一些更新查询 我想在执行更新查询时获取更新的实际记录数 spring data jpa 有没有办法做到这一点 我
  • 在源代码管理中维护存储过程

    你们如何维护存储过程 由于一些不同的原因 我想保留它们的版本 本周末我还将设置 Cruisecontrol net 和 nant 来自动化构建 我正在考虑编写一些代码 为我的开发数据库中的所有表 sprocs udf xml 模式生成创建脚
  • 使用java实现网站家长控制

    我想用java编写一个独立的应用程序来控制对受限网站的访问 而孩子们在父母不在身边时使用互联网 主要思想是根据浏览者来阻止成人 不需要的网站 用例是这样的 1 用户打开浏览器 2 我们的应用程序 在后台运行 应该弹出一个身份验证框并要求用户
  • 获取当前文件夹路径

    我想创建一个转换文件的程序 我希望用户能够将可执行文件放在任何目录中 并且在执行该程序时 双击 exe 我希望该程序能够处理exe 文件所在的当前文件夹中的所有文件 程序如何确定当前执行的路径 I tried System Windows
  • 如何在Python 3.10中的匹配(其他语言中切换)案例中使用多个案例

    我正在尝试在类似于下面所示的函数中使用多个案例 以便我能够使用 python 3 10 中的匹配案例来执行多个案例 def sayHi name match name case Egide Eric return f Hi Mr name
  • 运行 npmserve 时收到错误消息模块构建失败(来自 ./node_modules/sass-loader/dist/cjs.js)

    我现在从事 Vue Vuetify 项目已经有一段时间了 直到昨天一切都运转良好 我在使用时遇到问题
  • 当vim进入可视模式时运行命令

    我使用一个小脚本来触发插入模式以更改行号颜色 function CursorLineNrColorInsert mode Insert mode blue if a mode i highlight CursorLineNr ctermfg