当前位置: 首页 > 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

相关文章:

  • 设计模式之禅之设计模式-原型模式
  • 字符串复制,拼接,比较大小函数
  • 电脑指示灯闪烁,但是无法开机的解决方案
  • 前端---认识HTML
  • 【CSDN 每日一练 ★☆☆】【数学】Excel表列名称
  • 万宾科技智能井盖,实现对井盖的监测
  • python-jupyter实现OpenAi语音对话聊天
  • 【大模型-第一篇】在阿里云上部署ChatGLM3
  • Mybatis和Hibernate的区别
  • 无需公网IP,贝锐花生壳内网穿透远程访问NAS
  • 使用xlwings实现对excel表中指定列隔行求和
  • 思科9300交换机使用USB进行升级ISO
  • go单元格测试
  • ElasticSearch中常见的分词器介绍
  • Java算法(五):手写数组逆置API方法,实现数组逆置。 while实现 for循环实现
  • @jsonView过滤属性
  • ES6系统学习----从Apollo Client看解构赋值
  • java2019面试题北京
  • Laravel 中的一个后期静态绑定
  • MD5加密原理解析及OC版原理实现
  • Median of Two Sorted Arrays
  • Spring Cloud中负载均衡器概览
  • Theano - 导数
  • Vue学习第二天
  • 不上全站https的网站你们就等着被恶心死吧
  • 浮现式设计
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 盘点那些不知名却常用的 Git 操作
  • 浅谈Golang中select的用法
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #NOIP 2014#Day.2 T3 解方程
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $forceUpdate()函数
  • (C++17) std算法之执行策略 execution
  • (C语言)共用体union的用法举例
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (TOJ2804)Even? Odd?
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)mysql_MYSQL(三)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .NET面试题(二)
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • [100天算法】-二叉树剪枝(day 48)
  • [20140403]查询是否产生日志
  • [20171101]rman to destination.txt
  • [AR Foundation] 人脸检测的流程
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成