2

Powershell ファイルから Windows クリップボードに関数全体をコピーするために、Vim にキーボード ショートカットが必要です。そのためのコマンドは次のとおりです。

1) va{Vok"*y- ビジュアル モード、{} ブロックの選択、ビジュアル ライン モード、セレクション トップへの移動、ヘッダー行のインクルード、Windows クリップボードへのヤンク。

ただし、内部 {} ブロックのない関数に対してのみ機能します。これに対する有効な回避策は次のとおりです。

2) va{a{a{a{a{a{a{Vok"*y- (1) と同じですが、{} ブロックの選択は複数回行われます - 7 つの {} 中括弧を含むコード ブロックで機能します。

しかし、問題は - (1) コマンドは vim 関数から呼び出された場合は正常に動作しますが、(2) vim 関数から呼び出された場合は、動作がおかしくなり、間違ったコード ブロックを選択します。

function! CopyCodeBlockToClipboard ()
    let cursor_pos = getpos('.')
    execute "normal" 'va{a{a{a{a{a{a{Vok"*y'
    call setpos('.', cursor_pos)
endfunction

" Copy code block to clipboard
map <C-q> :call CopyCodeBlockToClipboard()<CR>

ここで CopyCodeBlockToClipboard で何が間違っていますか? (2) コマンドは、vim で直接実行すると期待どおりに機能します。

アップデート:

私はそれに気づきました:

  • さらに a{ がある場合、関数に含まれるブロック
  • その場合、vim は V を実行しません。

ここではvimのエラー処理が異なるようです。Extra a{ 何らかのエラーが発生し、通常のコマンド実行では無視されます。しかし、 :normal を介した関数内からの実行は失敗し、V (またはおそらくエラーに続くコマンド) を呼び出さないでしょう。

これに対する回避策はありますか?

4

2 に答える 2

1

このマクロは、達成したいものに近づく必要があります。

?Function<CR>  jump to first Function before the cursor position
v              enter visual mode
/{<CR>         extend it to next {
%              extend it to the closing }
"*y            yank into the system clipboard
于 2013-07-11T08:18:44.150 に答える