我是vimscript的初学者,即使我在网上搜索了几个小时,我也无法找到如何做以下事情:
我想创建一个vimscript,允许通过输入一些字母来打开文件:
假设
我想要什么
<leader><leader>p
调用一个可以执行必要操作的函数(我不知道到底是什么时候......)
此功能将要求用户输入所需的字母。当他输入字母时,菜单会显示可用的结果(因此,此菜单需要自动刷新)。
我希望用户可以结束输入,然后通过突出显示它来移动到所需的文件。
例如:
我目前拥有什么
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实现)。
有人可以帮助我开始吗?
谢谢,
达明
答案 0 :(得分:3)
您在屏幕截图中显示的是命令行的野性菜单。您可以为自己的命令添加自定义完成,请参阅:help :command-completion-custom
。遗憾的是,您无法更改:edit
等内置命令的完成行为(但您可以定义自己的包装器命令:Edit
并使其使用完整的功能)。
第二种机制是插入模式完成(:help ins-completion-menu
)。这用于自动完成,片段,输入缓冲区的任何文本。除非您想将文件名插入缓冲区(例如,为了完成import
语句),否则这不适合您。
许多插件都实现了自己的完成机制,因为它提供了最大的控制权。它们创建一个新的分割临时缓冲区,并使用它来显示匹配项,通常与插入模式完成菜单结合使用(但不是用于插入所选文本,而是对其进行操作)。看看the FuzzyFinder plugin,它非常好用,甚至允许插入自定义数据提供程序(可能是你的Python脚本!)