6

特定の時間にユーザー入力のために中断する vim マクロを定義したいのですが、これは可能ですか?

編集:マクロではなく、録音(q)をメンターすることがわかりました

入力コマンドを録音で使用することは可能ですが、その価値よりも面倒です。

最初に挿入入力エスケープをキーにマップしました

:map <F2> a<C-R>=input('input: ')<CR>

次に、この記録をqレジスタに作成しました

name: 

そしてそれを新しいタブに貼り付けました

iname: ^[

そして、最後のエスケープの後、私<C-V><F2>はラインを作ることを押しました:

iname ^[^[OQ

q バッファにヤンクして戻し、マクロを使用して、入力関数を使用できるようにしました。それはうまくいきますが、ひどいです。

4

4 に答える 4

3

はい。関数を参照してくださいinput({prompt}, [, {text} [, {completion}] ])inputdialog({prompt} [, {text} [, {cancelreturn}]])ダイアログポップアップには もあり ます。

于 2012-07-19T19:06:29.877 に答える
2

マッピングまたはマクロ内で使用するinput()と、残りの文字が入力として取得されますが、これは望ましくありません。Vim は、マッピング文字ストリームからの読み取りを一時的に中断するinputsave()および関数を提供します。inputrestore()

mogelbrod の回答に基づくと、これは機能しません。はitest入力として読み込まれます。

oBEFORE ^R=input('prompt> ')^Mitest

しかし、これは:

function! Input()
    call inputsave()
    let text = input('prompt> ')
    call inputrestore()
    return text
endfunction
oBEFORE ^R=Input()^Mitest

残念ながら、<C-R>式を取るため、コマンドをインラインで配置することはできず、別のInput()関数を定義する必要があります。

于 2012-07-20T06:48:24.563 に答える
1

残念ながら、それは不可能のようです。マクロ内でトリガーできますがinput()、記録された追加の入力が入力プロンプトに挿入されるため、後で続行することはできないようです。

行を名前付きレジスタにヤンクし ( "qY)、それを実行して ( @q) 試してみます。
注: ^Rand^Mを Ctrl-V Ctrl-R/M に置き換えます ( を参照:help i_CTRL-V)。

  • oBEFORE ^R=input('prompt> ') -作品
  • oBEFORE ^R=input('prompt> ')^Mitest - 動作itestしますが、プロンプトに挿入します
  • oBEFORE ^R=input('prompt> ')<CR>test - 失敗
于 2012-07-19T20:16:31.170 に答える