[vim]Python编写插件学习笔记2 - 分离

news/2025/2/21 8:04:58/

0 环境

  1. Windows 11 22H2
  2. gVim82 (D:/ProgramFiles/Vim)
  3. Python311 (D:/ProgramFiles/Python311)
  4. Vundle v0.10.2

阅读本文前,需要先了解前文:

  • 《[vim]Python 编写插件学习笔记1 - 开始》

1 Python 与 vimscript 分离

前文编写 vim 插件的方式,是将 Python 代码嵌入到 vimscript 代码中。

而由于 Python 代码的格式问题(Tab 键),将 Python 代码独立出来,更方便 Python 代码的编写,同时也方便模块/单元调试。

以下实现参考自 《MixedMath: Writing a Python Script to be Used in Vim (davidlowryduda.com)》一文实现。

  • vimscript
" test.vimlet s:script_dir = fnamemodify(resolve(expand('<sfile>', ':p')), ':h')function! TestVim()python3 << EOF
# python part startimport sys								# 必要的引用
import vimscript_dir = vim.eval('s:script_dir')
sys.path.insert(0, script_dir)			# 关键的三句,主要是添加 Python 搜索路径import test								# 引用test.TestVim2()							# 调用# python part end
EOFendfunction
  • python
# -*- coding: utf-8 -*-
### test.pydef TestVim2():print("TestVim say hello 2!")

(为了与之前的代码区分,所以改成了 TestVim2,输出消息也进行了修改!)

  • 加载
:so %
  • 测试
:call TestVim()

补充说明:

加载与测试,一般在先当前 vim 进程加载测试。

但是,由于之前内容有添加 vim 自动加载,所以应该注意代码内容最好有变化,以分区 vim 自动加载的旧版本插件内容。或者,更直接的,先删除/注释掉自动加载插件的配置。

另外,猜想应该是 vim 加载 Python 插件的问题,手动加载命令 :so %,有时仍会出现调用时,找不到 Python 函数/模块的问题(代码没问题)。此时,重启一下 vim 即可。

2 参考

  1. Writing Vim plugin in Python (candidtim.github.io)
  2. How to Write Vim Plugins with Python - DZone
  3. Learn Vimscript the Hard Way (stevelosh.com)
  4. MixedMath: Writing a Python Script to be Used in Vim (davidlowryduda.com)
  5. Vim script for Python Developers · GitHub

http://www.ppmy.cn/news/1213147.html

相关文章

node插件MongoDB(四)—— 库mongoose 的条件控制(三)

文章目录 前言一、运算符二、逻辑运算1. $or 逻辑或2. $and 逻辑与 三、正则匹配 前言 在mongodb 不能使用 > < > < ! 等运算符&#xff0c;需要使用替代符号。 一、运算符 > 使用 $gt< 使用 $lt> 使用 $gte< 使用 $lte! 使用 $ne 例子&#xff1a;获…

【Python 千题 —— 基础篇】列表的长度(for 循环版)

题目描述 题目描述 列表的长度。题目将给出一个列表 [a, b, c, d, e, f]&#xff0c;请使用 for 循环编写代码获取列表的长度。 输入描述 无输入。 输出描述 输出该列表的长度。 示例 示例 ① 输出&#xff1a; 列表的长度: 6代码讲解 下面是本题的代码&#xff1a;…

CSS3 中 transition 和 animation 的属性分别有哪些

Transition 属性&#xff1a; ​​transition​​ 属性用于定义元素在状态改变时从一个样式转换到另一个样式的过渡效果。它包含以下几个属性&#xff1a; • ​​transition-property​​&#xff1a;指定过渡效果应用的 CSS 属性名称&#xff0c;多个属性可以用逗号分隔。 •…

SpringBoot学习笔记-创建菜单与游戏页面(下)

笔记内容转载自 AcWing 的 SpringBoot 框架课讲义&#xff0c;课程链接&#xff1a;AcWing SpringBoot 框架课。 CONTENTS 1. 地图优化改进2. 绘制玩家的起始位置3. 实现玩家移动4. 优化蛇的身体效果5. 碰撞检测实现 本节实现两名玩家即两条蛇的绘制与人工操作移动功能。 1. 地…

SpringBoot 监控

概述 SpringBoot自带监控功能Actuator&#xff0c;可以帮助实现对程序内部运行情况监控&#xff0c;比如监控状况、Bean加载情况、配置属性、日志信息等。 使用步骤 导入依赖坐标 <dependency><groupId>org.springframework.boot</groupId><artifactI…

【Java 进阶篇】Java与JQuery:探秘事件绑定、入口函数与样式控制

在现代的Web开发中&#xff0c;Java和JQuery是两个不可或缺的角色。Java为我们提供了强大的后端支持&#xff0c;而JQuery则是前端开发的得力助手。本篇博客将围绕Java和JQuery&#xff0c;深入探讨事件绑定、入口函数和样式控制&#xff0c;带你进入前端开发的奇妙世界。 Jav…

vue设计原理-带你重走vue诞生路程

我们首先看下面这个小demo demo源码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" conten…

关于道一云-七巧使用感悟

低代码&#xff0c;开发快速&#xff0c;缺点组件比较少但能满足大多数场景&#xff0c;如果需要的话得自己造&#xff0c;官方的技术群里面普遍问题响应就很快&#xff0c;技术文档这个会抽风&#xff0c;有些代码就改个筛选条件本地死活运行不了&#xff0c;去官网那里问他们…