[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.py

def TestVim(type):
    print("TestVim: " + type)

3 vimscript 实现

" test.vim

let s:script_dir = fnamemodify(resolve(expand('<sfile>', ':p')), ':h')

function! TestVim(type)					# 定义参数

python3 << EOF
# python part start

import sys
import vim

script_dir = vim.eval('s:script_dir')
sys.path.insert(0, script_dir)

from test import TestVim				# 引用

TestVim(vim.eval('a:type'))				# 传入参数

# python part end
EOF

endfunction
  • 加载
: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/140002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高并发架构设计(三大利器:缓存、限流和降级)

引言 高并发背景 互联网行业迅速发展&#xff0c;用户量剧增&#xff0c;系统面临巨大的并发请求压力。 软件系统有三个追求&#xff1a;高性能、高并发、高可用&#xff0c;俗称三高。三者既有区别也有联系&#xff0c;门门道道很多&#xff0c;全面讨论需要三天三夜&#…

使用Inis搭配内网穿透实现Ubuntu上快速搭建博客网站远程访问

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

软件外包开发需求整理需要注意的问题

在整理软件开发需求时&#xff0c;注意以下问题可以有助于确保需求的准确性、完整性和可行性。通过认真考虑这些问题&#xff0c;您可以确保整理出一份清晰、全面且具有可行性的软件开发需求文档&#xff0c;有助于项目的成功实施。北京木奇移动技术有限公司&#xff0c;专业的…

LabVIEW中NIPackageManager功能介绍

LabVIEW中PackageManager功能介绍 使用NIPackage Manager可安装、更新、修复和删除NI软件。 安装NI软件 使用PackageManager浏览和安装NI软件。 1. 在浏览产品选项卡上&#xff0c;单击产品类别以显示该类别中的可用产品。 2. 选择要安装的产品&#xff0c;然后单击…

Jenkins入门——安装docker版的Jenkins 配置mvn,jdk等 使用案例初步 遇到的问题及解决

前言 Jenkins是开源CI&CD软件领导者&#xff0c; 提供超过1000个插件来支持构建、部署、自动化&#xff0c; 满足任何项目的需要。 官网&#xff1a;https://www.jenkins.io/zh/ 本篇博客介绍docker版的jenkins的安装和使用&#xff0c;maven、jdk&#xff0c;汉语的配置…

MobileSAM论文笔记

摘要 自Meta研究团队发布SAM&#xff08;Segment Anything Model&#xff09;项目依赖&#xff0c;因其令人惊艳的零样本迁移特性和与其他视觉应用兼容的高通用性&#xff0c;引起了极大的关注。由于大多数类似的应用都需要运行在资源限制的边缘设备&#xff0c;如手机&#x…

HashMap源码分析(三)

迭代&遍历 HashMap总共有3种遍历容器的方式&#xff1a; 1.使用Iterator迭代&#xff08;推荐&#xff09; Iterator<Map.Entry<String, String>> iterator hashMap.entrySet().iterator(); while (iterator.hasNext()){System.out.println(iterator.next(…

C++算法: 最大化数组末位元素的最少操作次数

涉及知识点 数学 题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;这两个数组的长度都是 n 。 你可以执行一系列 操作&#xff08;可能不执行&#xff09;。 在每次操作中&#xff0c;你可以选择一个在范围 [0, n - 1] 内的下标 i &#xff0c;并交换 num…

uniapp: 实现pdf预览功能

目录 第一章 实现效果 第二章 了解并解决需求 2.1 了解需求 2.2 解决需求 2.2.1 方法一 2.2.2 方法二 第三章 资源下载 第一章 实现效果 第二章 了解并解决需求 2.1 了解需求 前端需要利用后端传的pdf临时路径实现H5端以及app端的pdf预览首先我们别像pc端一样&#…

webgoat-Challenges

AdminLostpassword 这一题密码藏在logo图片里 请求GET /WebGoat/challenge/logo 搜索admin看到密码&#xff0c;使用账号admin和这个密码登录拿到flag Without password 题目要求&#xff1a;在不知道Larry的密码情况下登录 考虑使用SQL注入 密码输入 123 or 11 -- Admin p…

CSRF漏洞

文章目录 CSRF(跨站请求伪造漏洞&#xff09;关键点目标CSRF类别GET方式post方式 CSRF验证CSRF 实战与 XSS 漏洞相结合 CSRF 防御无效防御有效防御 案例CSRF 漏洞实战 CSRF(跨站请求伪造漏洞&#xff09; ​ 跨站请求伪造(Cross Site Request Forgery&#xff0c;CSRF)是一种攻…

2023最新版JavaSE教程——第6天:面向对象编程(基础)

目录 一、面向对象编程概述(了解)1.1 程序设计的思路1.2 由实际问题考虑如何设计程序1.3 如何掌握这种思想&#xff1f; 二、Java语言的基本元素&#xff1a;类和对象2.1 引入2.2 类和对象概述2.3 类的成员概述2.4 面向对象完成功能的三步骤(重要)2.4.1 步骤1&#xff1a;类的定…

C# Spire.Pdf将PDF文件转换为Word文件

一.开发框架&#xff1a; .NetCore6.0 工具&#xff1a;Visual Studio 2022 二.思路&#xff1a; 1.界面上传PDF文件&#xff0c;并保存 2.PDF文件转换为Word文件并保存 3.使用SHA256Hash判断文件是否已经转换过了&#xff0c;转换过了的话&#xff0c;就返回原先转换过的文…

保姆级使用vuedraggable三方组件

第一步 引入vuedraggable npm i vuedraggable -S 第二步 直接使用&#xff0c;源码如下 <template><draggableclass"list-group"tag"ul"v-model"list"v-bind"{animation: 1000,group: description,disabled: false,ghostClass:…

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容

一百二十三、计算机相关理论 123.1 计算机的组成 目前的计算机都还是 冯诺依曼体系 &#xff0c;也就是由&#xff1a;输入、输出、运算器、存储器、控制器&#xff0c;这个五个部分构成。输入&#xff1a;Input&#xff0c;常见的输入设备&#xff0c;比如鼠标&#xff0c;键…

五、L2TPv2 VPN

L2TPv2 VPN 1、L2TPv2概述1.1.目的1.2.特点 2、L2TP原理2.1.基本概念2.2.工作原理2.2.1.协议架构2.2.2.报文结构2.2.3.报文封装2.2.4.报文传输 3、工作过程4、应用场景4.1、远程拨号用户发起L2TP隧道连接4.2、LAC接入拨号请求发起L2TP隧道连接4.3、LAC接入PPPoE用户发起L2TP隧道…

远程运维的定义以及优点详细讲解-行云管家

对于IT运维小伙伴而言&#xff0c;远程运维是最平常不过的一件事情了。比如下班了需要工作&#xff0c;可以远程运维就好了&#xff1b;比如帮助用户远程安装远程运维软件等等。今天我们就一起来简单聊聊远程运维的定义以及优点&#xff0c;顺便看看市面上哪款远程运维软件好用…

开发企业微信群机器人,实现定时提醒

大家好&#xff0c;我是鱼皮&#xff0c;今天分享一个用程序解决生活工作问题的真实案例。 说来惭愧&#xff0c;事情是这样的&#xff0c;在我们公司&#xff0c;每天都要轮流安排一名员工&#xff08;当然也包括我&#xff09;去楼层中间一个很牛的饮水机那里接水。但由于大…

深耕智慧物流夯实竞争优势,极智嘉(Geek+)斩获多项大奖

全球仓储机器人引领者极智嘉(Geek)&#xff0c;一直以来致力于为仓储与制造场景提供高效柔性的智能物流解决方案&#xff0c;强劲的发展实力备受认可。而近段时间&#xff0c;极智嘉更是频频传来好消息&#xff0c;不仅斩获了英国机器人与自动化仓储创新大奖&#xff0c;获评胡…

RT-DETR算法优化改进:一种新颖的动态稀疏注意力(BiLevelRoutingAttention) | CVPR2023

💡💡💡本文独家改进: 提出了一种新颖的动态稀疏注意力(BiLevelRoutingAttention),以实现更灵活的计算分配和内容感知,使其具备动态的查询感知稀疏性 1)代替RepC3进行使用; 2)BiLevelRoutingAttention直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介…