当前位置: 首页 > news >正文

[vim]Python编写插件学习笔记3 - 命令行参数

0 环境

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

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

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

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

1 前提说明

由于本人并未仔细学习 vimscript 相关内容,只是凭自己的理解尝试写 vim 插件,只是本着 “够用就就行” 的基本原则实现自己想要的功能。

所以,多少会有不足的内容,甚至更好的方案,本文则不详述。

命令行参数,只是想实现像平时使用 vim 命令一样,正常使用自己的插件。

举例说明:vim 的 make 命令

:make
:make clean

这样使用确实很方便。

2 Python 实现

# -*- coding: utf-8 -*-
### test.pydef TestVim(type):print("TestVim: " + type)

3 vimscript 实现

" test.vimlet s:script_dir = fnamemodify(resolve(expand('<sfile>', ':p')), ':h')function! TestVim(type)					# 定义参数python3 << EOF
# python part startimport sys
import vimscript_dir = vim.eval('s:script_dir')
sys.path.insert(0, script_dir)from test import TestVim				# 引用TestVim(vim.eval('a:type'))				# 传入参数# python part end
EOFendfunction
  • 加载
:so %
  • 测试
:call TestVim("init")
TestVim: init
:call TestVim("build")
TestVim: build

注意:这样实现,参数只能是字符串,注意添加双引号。

4 配置

以上可以通过 call 命令来调用插件内的函数。但不能直接通过命令方式调用。

需要添加配置:

" test.vim
" 脚本末尾
" 接收 0 个或 1 个参数
command! -nargs=? TestVim call TestVim(<q-args>)
  • 加载
:so %
  • 测试
:TestVim
TestVim: 
:TestVim init
TestVim: init
:TestVim build
TestVim: build:TestVim init build
TestVim: init build		# "init build" 被作为一个字符串

5 命令行参数说明

5.1 -nargs

  • -nargs=0 - 无参数(默认)
  • -nargs=1 - 仅 1 个参数
  • -nargs=* - 任意多个参数(0,1, 或多个),使用空白符分隔
  • -nargs=? - 0 或1 个参数
  • -nargs=+ - 任意多个参数(1 或多个),但必须提供参数

5.2 <q-args> - “quoted args”

将命令行接收的参数使用双引号括起来,视作一个单一字符串。之后,再当其作一个合法值传给表达式使用。

如果没有传入参数, 表示为一个空字符串。

5.3 <f-args> - “function args”

表示命令行传递参数给用户定义的函数。

传入的命令行参数,会以空格和 Tab 进行分割,再将各个参数使用引号括起来,均视作字符串。

之后,以引号括起来的,被逗号分割的参数列表会替换 参数,传入用户定义的函数。

如果命令行未传入参数, 则被移除。

如果命令行需要输入空格符,必须使用反斜杠符号 (\) 进行转义。

示例:

command		   <f-args> ~
XX ab		   'ab'
XX a\b		   'a\b'
XX a\ b		   'a b'
XX a\  b	   'a ', 'b'
XX a\\b		   'a\b'
XX a\\ b	   'a\', 'b'
XX a\\\b	   'a\\b'
XX a\\\ b	   'a\ b'
XX a\\\\b	   'a\\b'
XX a\\\\ b	   'a\\', 'b'

6 参考

  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. Vim script for Python Developers · GitHub

相关文章:

[vim]Python编写插件学习笔记3 - 命令行参数

0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 阅读本文前&#xff0c;需要先了解前文&#xff1a; 《[vim]Python 编写插件学习笔记1 - 开始》 《[vim]Python 编写插件学习笔记2 - 分离》 1 前提说明 由于本…...

【仙逆】王林400年晋升元婴,复仇藤化元杀尽藤姓,高老畏罪自裁

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料仙逆第10集剧情解析&#xff0c;高启明&#xff0c;缥缈宗的元婴初期老祖&#xff0c;一生潜心研究推演之术&#xff0c;洞察先机&#xff0c;乃是宗门之人的精神支柱。藤化元曾为寻找王林父母所在之…...

云原生实战课大纲

1. 云原生是什么 原生应用&#xff08;java,pyrhon&#xff09; 上云的过程应用上云遇到的问题1.微服务的拆分 微服务的访问关系应用的架构云原生适合什么样的人去学具备什么样的前提条件云原生要学习什么docker k8s devlops server mesh jks k8s监控吧自己的微服务部署上…...

数据湖架构

数据湖架构介绍 数据湖&#xff08;Data Lake&#xff09;是一个存储大量结构化和非结构化数据的集中式数据存储库。 与传统的数据仓库不同&#xff0c;数据湖采用扁平化结构&#xff0c;将数据存储在原始形式下&#xff0c;不需要进行预处理或转化。这使得数据湖能够同时支持…...

Zabbix 5.0部署(centos7+server+MySQL+Apache)

环境 系统IPZABBIX版本主机名centos7192.168.231.2195.0zabbix-server 安装zabbix 我选择版本是zabbix-5.0 zabbix的官网是Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution 安装Zabbix软件源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/…...

YOLO改进系列之注意力机制(CloAttention模型介绍)

CloAttention来自清华大学的团队提出的一篇论文CloFormer&#xff0c;作者从频域编码的角度认为现有的轻量级视觉Transformer中&#xff0c;大多数方法都只关注设计稀疏注意力&#xff0c;来有效地处理低频全局信息&#xff0c;而使用相对简单的方法处理高频局部信息。很少有方…...

openssl+AES开发实例(linux)

文章目录 一、AES介绍二、AES原理三、AES开发实例 一、AES介绍 AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称密钥加密标准&#xff0c;它是一种对称加密算法&#xff0c;意味着相同的密钥用于加密和解密数据。AES 是 NIST&#xff08;美国国家标准与技…...

FreeRTOS源码阅读笔记3--queue.c

消息队列可以应用于发送不定长消息的场合&#xff0c;包括任务与任务间的消息交换&#xff0c;队列是 FreeRTOS 主要的任务间通讯方式&#xff0c;可以在任务与任务间、中断和任务间传送信息&#xff0c;发送到 队列的消息是通过拷贝方式实现的&#xff0c;这意味着队列存储…...

云原生Kubernetes系列 | 通过容器互联搭建wordpress博客系统

云原生Kubernetes系列 | 通过容器互联搭建wordpress博客系统 通过容器互联搭建一个wordpress博客系统。wordpress系统是需要连接到数据库上的,所以wordpress和mysql的镜像都是需要的。wordpress在创建过程中需要指定一些参数。创建mysql容器时需要把mysql的数据保存在宿主机本…...

java读取OPC DA数据---Utgard

java读取OPC DA数据—Utgard Utgard库已经过时&#xff0c;原作者早已删除库&#xff0c;建议使用OPC UA&#xff0c;兼容OPC DA。 下面讲解Utgard使用 C#和C都不用配置DCOM&#xff0c;直接调用函数 既然是非要用Java&#xff0c;那就别想太方便&#xff0c;需要配置DCOM(后…...

在 Android 上简单安全地登录——使用凭证管理器和密钥

我踏马很高兴地听说&#xff0c; Credential Manager的公开版本将于 11 月 1 日开始提供。Credential Manager 为 Android 带来了身份验证的未来&#xff0c;简化了用户登录应用程序和网站的方式&#xff0c;同时使其更加安全。 登录可能具有挑战性 - 密码经常使用&#xff0c…...

【Python】上市公司数据进行经典OLS回归实操

一、题目二、数据合并、清洗、描述性统计1、数据获取2、数据合并3、选择董监高薪酬作为解释变量的理论逻辑分析 三、多元回归模型的参数估计、结果展示与分析1、描述性统计分析2、剔除金融类上市公司3、对所有变量进行1%缩尾处理4、0-1标准化&#xff0c;所有解释变量5、绘制热…...

科研学习|科研软件——有序多分类Logistic回归的SPSS教程!

一、问题与数据 研究者想调查人们对“本国税收过高”的赞同程度&#xff1a;Strongly Disagree——非常不同意&#xff0c;用“0”表示&#xff1b;Disagree——不同意&#xff0c;用“1”表示&#xff1b;Agree--同意&#xff0c;用“2”表示&#xff1b;Strongly Agree--非常…...

微服务简单理解与快速搭建

分布式和微服务 含义 微服务架构 微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法&#xff0c;每个服务运行在自己的进程中&#xff0c;服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服…...

QColorDialog开发实例

文章目录 一、QColorDialog基本用法&#xff1a;二、QColorDialog详解三、QColorDialog接口说明静态函数成员函数 四、QColorDialog代码开发实例 QColorDialog 是 Qt 框架中用于选择颜色的对话框类。它提供了一个用户友好的界面&#xff0c;允许用户选择颜色。以下是 QColorDi…...

linux实现全局快捷键

文章目录 第一步:加载KF5GlobalAccel库第二步:代码实现2.1 定义一个QAction2.2 KGlobalAccel::self()注册快捷键3 源码地址有一个需求,就是在应用在后台运行时,用户可以通过快捷键将应用唤起。或者应用响应。 其实就是全局快捷键的功能。 这个功能利用了linux操作系统中的d…...

共享台球室小程序系统:智能化预约与管理

在当今数字化的时代&#xff0c;共享经济模式已经渗透到各个领域。其中&#xff0c;共享台球室作为一个结合了传统与现代元素的项目&#xff0c;越来越受到年轻人的喜爱。为了满足市场需求&#xff0c;我们设计了一款基于微信小程序的共享台球室预约与管理系统&#xff0c;通过…...

百度文心一言

1分钟了解一言是谁&#xff1f; 一句话介绍【文心一言】 我是百度研发的人工智能模型&#xff0c;任何人都可以通过输入【指令】和我进行互动&#xff0c;对我提出问题或要求&#xff0c;我能高效地帮助你们获取信息、知识和灵感哦 什么是指令&#xff1f;我该怎么和你互动&am…...

225.用队列实现栈(LeetCode)

思路 思路&#xff1a;用两个队列实现栈后进先出的特性 &#xff0c;两个队列为空时&#xff0c;先将数据都导向其中一个队列。 当要模拟出栈时&#xff0c;将前面的元素都导入另一个空队列&#xff0c;再将最后一个元素移出队列 实现 实现&#xff1a; 因为C语言没有库可以…...

汽车FMCW毫米波雷达信号处理流程(推荐---基础详细---清楚的讲解了雷达的过程---强烈推荐)

毫米波雷达在进行多目标检测时,TX发射一个Chirp,在不同距离下RX会接收到多个反射Chirp信号(仅以单个chirp为例)。 雷达通过接收不同物体的发射信号,并转为IF信号,利用傅里叶变换将产生一个具有不同的分离峰值的频谱,每个峰值表示在特定距离处存在物体。 请问,这种多目标…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...