阅读本文前,需要先了解前文:
由于本人并未仔细学习 vimscript 相关内容,只是凭自己的理解尝试写 vim 插件,只是本着 “够用就就行” 的基本原则实现自己想要的功能。
所以,多少会有不足的内容,甚至更好的方案,本文则不详述。
命令行参数,只是想实现像平时使用 vim 命令一样,正常使用自己的插件。
举例说明:vim 的 make 命令
:make
:make clean
这样使用确实很方便。
# -*- coding: utf-8 -*-
### test.py
def TestVim(type):
print("TestVim: " + type)
" test.vim
let s:script_dir = fnamemodify(resolve(expand('' , ':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
注意:这样实现,参数只能是字符串,注意添加双引号。
以上可以通过 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" 被作为一个字符串
-nargs
-nargs=0
- 无参数(默认)-nargs=1
- 仅 1 个参数-nargs=*
- 任意多个参数(0,1, 或多个),使用空白符分隔-nargs=?
- 0 或1 个参数-nargs=+
- 任意多个参数(1 或多个),但必须提供参数
- “quoted args”将命令行接收的参数使用双引号括起来,视作一个单一字符串。之后,再当其作一个合法值传给表达式使用。
如果没有传入参数, 表示为一个空字符串。
- “function args”表示命令行传递参数给用户定义的函数。
传入的命令行参数,会以空格和 Tab 进行分割,再将各个参数使用引号括起来,均视作字符串。
之后,以引号括起来的,被逗号分割的参数列表会替换 参数,传入用户定义的函数。
如果命令行未传入参数, 则被移除。
如果命令行需要输入空格符,必须使用反斜杠符号 (\) 进行转义。
示例:
command ~
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'