[vim]Python编写插件学习笔记1 - 开始
0 环境
- Windows 11 22H2
- gVim82 (D:/ProgramFiles/Vim)
- Python311 (D:/ProgramFiles/Python311)
- Vundle v0.10.2
1 Vim 支持 Python
gVim82 默认配置中,使用的是 Python3.8。
但我的环境安装的是 Python3.11,且不是安装在默认路径下。虽然添加了 PATH 环境变量,但 vim 对加载 Python 仍可能有问题。
测试步骤:
- 打开 vim
- 输入命令:
:py3 print("hello")
,回车 - 正常情况:在命令行打印 hello
- 错误情况:E370:无法加载库 python3.8.dll
解决 “无法加载库 python3.8.dll” 问题:
修改 vim 配置文件,添加如下配置:
set pythonthreedll=D:/ProgramFiles/Python311/Python311.dll
之后再进行以上测试,一切正常。
2 创建插件
vim 插件管理使用的是 Vundle,所以同样将新建的插件放到 Vundle 管理插件的目录: .vim/bundle/vim-test
- 目录组成
vim-test
|- README.md
\- plugin|- test.vim\- test.py
- 测试插件内容
" test.vim # 默认 vimscript 注释使用 "
function! TestVim() # vimscript 函数定义,函数名必须以大写字母开头python3 << EOF # Python 嵌入式代码开头# Python 嵌入代码最好在行内顶格,避免 Tab 问题
# python part start # Python 嵌入代码注释使用 #print("TestVim say hello!") # Python3 代码# python part end
EOF # Python 代码结束endfunction # vimscript 函数定义结束
- 手动加载
:source %
# 或者使用命令缩写
:so %
- 运行测试
:call TestVim() # 注意:必须带括号,即使没有参数
正常情况,可以在命令行中看到打印消息:TestVim say hello!
3 自动加载插件
创建好的插件,不可能总是手动加载,需要配置 vim 自动加载。
由于使用 Vundle 管理插件,对应配置也放到 Vundle 部分。
- 修改配置
修改 .vimrc 或 _vimrc 配置文件:(具体配置不是本文内容,故不详述)
call vundle#begin('$VIM/.vim/bundle')"...
Plugin 'file:///D/ProgramFiles/Vim/.vim/bundle/vim-test'
"...call vundle#end()
注意:这里添加了本地全路径,意为 Vundle 从本地源安装插件。
补充说明:
根据网上内容,这样配置 Vundle 可以从本地源安装 vim 插件。但是在使用
:PluginInstall vim-test
命令进行安装时,却会出错。具体原因未深究。
但是,测试发现,只要这样添加上配置,vim 就会自动加载插件, 只不过无法使用 Vundle 管理。而 Vundle 管理,最多的就是更新插件,但这个插件是我自己写在本地的,只要修改就更新了,不存在 Vundle 管理更新的问题。
- 测试自动加载
打开 vim,测试命令::call TestVim()
,可以看到正确输出打印信息。
4 命令与快捷键使用配置
通常我们使用插件,要么是使用快捷键,要么是使用命令。
- 修改配置
注意:此配置也可以添加在 test.vim 末尾,vim 自动加载插件时,这些配置同样会生效。
" vim-test {{{{{{{{{{
command! TestVim call TestVim() # 命令配置
nnoremap Q :TestVim<CR> # 快捷键配置
" }}}}}}}}}} End of vim-test
- 测试
重启 vim 以加载新的配置。可以分别测试使用命令::TestVim
或输入快捷键 Q
,可以看到正确输出打印信息。
5 参考
-
VIM E370: 无法加载库 msys-python3.8.dll-CSDN博客
-
用 Python 写 Vim 插件的套路是什么?-CSDN博客
-
详解如何使用Python编写vim插件-CSDN博客
-
Writing Vim plugin in Python (candidtim.github.io)
-
How to Write Vim Plugins with Python - DZone
相关文章:
[vim]Python编写插件学习笔记1 - 开始
0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 1 Vim 支持 Python gVim82 默认配置中,使用的是 Python3.8。 但我的环境安装的是 Python3.11,且不是安装在默认路径下。虽然添加了 PATH 环…...
深入理解JVM虚拟机第二十篇:静态变量和局部变量的对比以及栈帧对垃圾回收的意义以及JVM中栈帧与堆内对象的应用关系图示
大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻JVM 本文章简介:话不多说,让我们讲清楚静态变量和局部变量的对比 文章目录…...

【计算机网络基础实验】实验二 有线IP互通网络实践
任务一 IP路由协议实现企业路由器通信 目录如下: 任务一 IP路由协议实现企业路由器通信2.1.1 任务描述2.1.2 任务目的2.1.3 任务实施实验需求实验步骤步骤1:更改每台设备的名称步骤2: 给R1接口配置相应IP地址步骤3: 给R2接口配置相…...

【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)
一、编程实现语音和开发板通信 wiringpi库源码demo.c 二、基于前面串口的代码修改实现 uartTool.huartTool.cuartTest.c 三、ADB adb控制指令 四、手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具,在终端输入adb安装指令: sudo apt-g…...

【Spring】静态代理
例子: 租房子 角色: 我 (I ) 中介( Proxy ) 房东( host ) Rent 接口 package org.example;public interface Rent {void rent(); }房东 package org.example;public class Host implements Rent{Overridepublic void rent() …...
tomcat web.xml文件中servlet的load-on-startup
先看一个例子: <servlet><description>JAX-WS endpoint - restful</description><display-name>restful</display-name><servlet-name>restful-addnumbers</servlet-name><servlet-class>com.sun.xml.ws.transpor…...
记chrome打不开网址,无法搜索问题
打开网址解决办法 2023关于chrome谷歌浏览器无法正常上网问题,解决办法,亲测有效 下载插件,解压后拖入chrome的扩展程序中,可以打开国内网址 google引擎搜索解决办法 打开无痕浏览 (不知道什么原理,可…...

Spring面试题:(五)Spring注解开发@Component,@Autowired,@Bean,@Configuration
Bean基本注解 spring提供注解的版本 Component注解替代bean标签 bean其它属性的相关注解: scope 替代scopelazy 替代lazy-initPostConstruct 替代init-methodPreDestroy 替代destroy-method 使用Component注解的前提是开启注解扫描 衍生注解Repository,Servi…...

【Qt-23】ui界面设计-ToolBar
1、ToolBar 右击主窗体添加工具栏 新建动作,可设置图标,图标有本地文件和资源两种方式。 修改toolButtonStyle的属性,可设置图标与汉字显示的方式。 页面跳转: connect(ui->action, SIGNAL(triggered()), this, SLOT(openWid…...
nodejs 异步架构
nodejs的核心之一就是非阻塞的异步IO,于是想知道它是怎么实现的,挖了下nodejs源码,找到些答案,在此跟大家分享下。首先,我用了一段js代码test-fs-read.js做测试,代码如下: var path require(pa…...

腾讯云优惠券介绍、作用、领取方法及使用教程
随着云计算技术的发展,越来越多的企业和个人选择使用云服务进行数据存储、计算等业务。腾讯云作为国内知名的云服务商,提供了一整套完善的云解决方案,并不定期发放优惠券以吸引更多的客户。本文将为大家详细介绍腾讯云优惠券的作用、领取方法…...

浅谈智能变电站自动化系统的应用与产品选型
安科瑞电气股份有限公司 上海嘉定 201801 摘要:现如今,智能变电站发展已经成为了电力系统发展过程中的内容,如何提高智能变电站的运行效率也成为电力系统发展的一个重要目标,为了能够更好地促进电力系统安全稳定运行,…...

适用于初学者的 .NET MAUI
适用于初学者的 .NET MAUI | Microsoft Learn 记录微软Learn中用到的代码。文章比较粗糙,大部分是项目代码粘贴。想详细学习的可到上面的链接学习,代码可以从这里复制后直接运行。 练习中一共有两个页面: 1、MainPage.xaml 用于添加列表中的…...
Web3项目灵魂所在之智能合约编写(Web3项目一实战之二)
正如标题所言,为什么将智能合约称为Web3项目的灵魂所在呢?其实,智能合约好比是传统App的服务器端,若服务器端宕机了,App也就僵死了。 假使您正在浏览本篇文章时,对智能合约还不是很了解,或者说是只知其名不知其意的话,那么,烦请您移步我另外一篇关于 区块链中的智能合…...

python-jupyter实现OpenAi语音对话聊天
1.安装jupyter 这里使用的是jupyter工具,安装时需要再cmd执行如下命令,由于直接执行pip install jupyter会很慢,咱们直接使用国内源 pip install --user jupyter -i http://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.t…...

恒源云之oss上传数据、云台下载数据
目录 一、本地cmd上传数据二、使用云平台下载数据 一、本地cmd上传数据 需要下载恒源云客户端oss需要先将数据(代码、数据集)压缩成zip文件。 本地cmd打开oss,测试是否安成功 oss输入oss命令,并正确输入账号密码 oss login在个人…...
大数据-之LibrA数据库系统告警处理(ALM-12039 GaussDB主备数据不同步)
告警解释 GaussDB主备数据不同步,系统每10秒检查一次主备数据同步状态,如果连续6次查不到同步状态,或者同步状态异常,产生告警。 当主备数据同步状态正常,告警恢复。 告警属性 告警ID 告警级别 可自动清除 12039…...
【左程云算法全讲6】链表相关
系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考…...

从HDFS到对象存储,抛弃Hadoop,数据湖才能重获新生?
Hadoop与数据湖的关系 1、Hadoop时代的落幕2、Databricks和Snowflake做对了什么3、Hadoop与对象存储(OSD)4、Databricks与Snowflake为什么选择对象存储5、对象存储面临的挑战 1、Hadoop时代的落幕 十几年前,Hadoop是解决大规模数据分析的“白…...

灰度与二值化
人工智能的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心,我为大家整理了一份600多G的学习资源,基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...