2012-07-06 85 views
3

我是vimscript的初学者,即使我在网上搜索几个小时,我也无法找到如何执行以下操作:如何在vimscript中显示自动完成菜单?

我想创建一个允许打开文件的vimscript通过键入只是一些字母:

假设

  • 我只在当前工作目录
  • 我有一个Python脚本,可以递归期待通过的文件夹和文件存储与搜索GIV连接阵列中的字母

我想要什么

<leader><leader>p调用,会做什么是必要的功能(我不知道究竟是什么的时刻......)

这功能会要求用户输入所需的字母。当他输入字母时,菜单将显示可用结果(所以,该菜单需要自动刷新)。

我希望用户可以结束键入,并通过突出显示来移动到所需的文件。

对于为例:

Autocompletion exemple

我现在有

if !has('python') 
    echo "Error: Sublime Search require vim compiled with +python" 
    finish 
endif 

let s:current_file=expand("<sfile>:r") 
let s:script_path = s:current_file . '.py' 
exec 'pyfile ' . s:script_path 

function SublimeSearchTrigger() 

    python lookFor() 

endfun 

if !exists('g:sublimesearch_keys') 
    let g:sublimesearch_keys = 1 
endif 

if g:sublimesearch_keys 
    inoremap <leader><leader>p :call SublimeSearchTrigger()<cr> 
    nnoremap <leader><leader>p :call SublimeSearchTrigger()<cr> 
endif 

而Python文件

# -*- encoding: utf-8 -*- 

import vim 
import sys 

def lookFor(): 

    # Ask user to type something to find 
    vim.command("let user_input = input('Sublime search : ')") 
    vim.command("call inputrestore()") 

    # Visual return of what we typed 
    vim.current.buffer.append(vim.eval('user_input')) 

如何开始?

正如你可以看到我不知道如何开始,但我真的有动力(我计划更复杂的功能,但会用python实现)。

有人可以帮我开始吗?

感谢,

达明

+2

http://www.vim.org/scripts/script.php?script_id = 1984
https://peepcode.com/products/peepopen/
是我想到的两个插件,此外http://www.vim.org/scripts/script.php?script_id=2620与http ://www.vim.org/scripts/script.php?script_id = 1879在插入文本时提供了一个弹出窗口和文件名完成;例如,在源代码中引用文件 – epsilonhalbe 2012-07-06 09:00:49

+0

@ epsilon'εⳆ2'halbe这正是我想要做的事情......只是为了方便必须绘制地图。非常感谢你。我会尝试看看FuzzyFinder如何为这个问题添加一个答案:) – 2012-07-06 09:10:07

+1

此外,您是否知道'set wildmenu','set wildmode = list:longest'和'set wildignore = *。o,*。jpg ,...'我认为它可以解决你的问题 – epsilonhalbe 2012-07-06 09:13:52

回答

3

你在你的屏幕截图显示的是命令行的wildmenu。您可以将自定义完成添加到您自己的命令中,请参阅:help :command-completion-custom。不幸的是,你不能改变诸如:edit之类的内置命令的完成行为(但是你可以定义你自己的包装命令:Edit并使其使用你的完整功能)。

第二种机制是插入模式完成(:help ins-completion-menu)。这用于自动完成,片段,输入缓冲区的任何文本。除非你想把你的文件名插入缓冲区(例如完成import声明),否则这不适合你。

许多插件实现自己的完成机制,因为这提供了最大的控制。他们创建一个新的分离暂存缓冲区,并使用它来显示匹配,通常与插入模式完成菜单结合使用(但不能插入所选文本,但要对其执行操作)。看看the FuzzyFinder plugin,它使用得非常好,甚至可以插入自定义数据提供程序(可能是您的Python脚本!)

+0

我喜欢这个想法,只需要为现有的(看起来不错的扩展)写一个自定义数据提供者。我认为这个解决方案是对这个问题的正确答案。谢谢你的提议。 – 2012-07-06 09:25:02

相关问题