2

私はこのvimscript関数を持っています

 function! Env()
     redir => s
     sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
     redir END
     return split(s)
 endfunction

この関数は、次の質問から取得されました:
Vim ですべての環境変数を一覧表示する方法は?

実行しても出力は表示され:call Env()ませんが:echo Env()、すべての環境変数の名前が出力として表示されます。

この出力を何らかの方法でコピーして貼り付けたいと思います。について知ってい:redirます。ただし、これは機能しません。

:redir @A
:echo Env()
:redir END
"ap

代わりに、空白行が貼り付けられます。

:redirコマンド (レジスタおよび/またはファイルへの) とバリエーションの多くの組み合わせを試しましたが、call Env()成功しませんでした。これは、生成された出力が関数の呼び出しによるものであるためですか? 関数がリストを返すためだと思いましたが、どちらにも:echo string(Env())キャプチャされていません:redir

編集:これは、以下の回答から使用した修正されたソリューションです。

function! Env()
    redir => s
    sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
    redir END
    let @s = string(split(s))
endfunction

次に、実行:call Env()"spてから貼り付けることができます。

関連する質問:
ex コマンドの出力を現在のバッファまたはファイルにリダイレクトする方法は?

4

2 に答える 2