【发布时间】:2016-07-11 13:33:13
【问题描述】:
我正在尝试制作一个帮助我选择正确版本的 sn-p
迁移编号,通过读取所有迁移文件
application/migrations.
我自己设法做的是我的文件名正在被过滤,而我 键入,当只剩下一个匹配时,在光标处插入其修订号 位置(始终是文件名的前 14 个字符)。
问题是当我按 TAB 进行选择时,我还剩下我所拥有的
到目前为止键入以搜索该修订号,意思是这样的
remo20160812110447.
问题是,在这种情况下如何摆脱remo!?
注意:示例使用硬编码值,为了更容易测试,这些将在以后
替换为# lst = os.listdir('application/migrations') 行。
另外一个额外的好处是将这些 20160710171947 值呈现为
选择时人类可读的日期格式,但在点击 TAB 后插入他们的
原始源版本。
global !p
import datetime
def complete(t, opts):
if t:
opts = [ m for m in opts if t in m ]
if len(opts) == 1:
return opts[0][:14]
return "(" + '|'.join(opts) + ')'
endglobal
snippet cimigration "Inserts desired migration number, obtained via filenames"
$1`!p import os
# lst = os.listdir('application/migrations')
lst = [
'20160710171947_create.php',
'20160810112347_delete.php',
'20160812110447_remove.php'
]
snip.rv = complete(t[1], lst)`
endsnippet
【问题讨论】:
-
我很高兴知道原因,为什么
x的人否决了这个问题。问题不在于 python 本身,因为这很容易解决,而在于这种情况下的插件行为。 -
我不是反对者,但我想争论两件事:您可能想点击
flag按钮并要求版主将问题移至vi.SE,更多人可能会能够在那里提供帮助。此外,我从未使用过 ultisnips,但我认为用纯 vimscript 编写这并不难。您可以使用split(globpath('application/migrations', '*.php'))获取列表,然后在点击<tab>后使用viwc。 -
重点是在输入时过滤结果,从而缩小搜索结果,而不是获得普通的文件列表