4

私は vimscript の初心者で、ウェブを何時間も検索しても、次のことを行う方法を見つけることができません。

いくつかの文字を入力するだけでファイルを開くことができる vimscript を作成したい:

仮定

  • 現在の作業ディレクトリのみを検索します
  • フォルダーを再帰的に調べ、指定された文字を含むファイルを配列に保存できるPythonスクリプトがあります

私が欲しいもの

<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 で実装する予定です)。

誰かが私が始めるのを手伝ってくれますか?

ありがとう、

ダミアン

4

1 に答える 1

3

スクリーンショットに表示されているのは、コマンドラインのワイルドメニューです。独自のコマンドにカスタム補完を追加できます。 を参照してください:help :command-completion-custom。残念ながら、次のような組み込みコマンドの補完動作を変更することはできません:edit(ただし、独自のラッパー コマンド:Editを定義して、完全な関数を使用するようにすることはできます)。

2 つ目のメカニズムは、挿入モードの完了 ( :help ins-completion-menu) です。これは、オートコンプリート、スニペット、バッファーに入力されたテキストに使用されます。ファイル名をバッファーに挿入したくない場合 (importステートメントの補完など)、これは適切ではありません。

多くのプラグインは、独自の補完メカニズムを実装しています。これにより、ほとんどの制御が可能になります。新しい分割スクラッチ バッファを作成し、それを使用して一致を表示します。多くの場合、挿入モードの補完メニューと組み合わせて使用​​します (ただし、選択したテキストを挿入するためではなく、それに基づいて操作するためではありません)。FuzzyFinder pluginを見てください。これはこれを非常にうまく採用しており、カスタム データ プロバイダー (Python スクリプトである可能性があります!) をプラグインすることもできます。

于 2012-07-06T09:19:11.973 に答える