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 (またはおそらくエラーに続くコマンド) を呼び出さないでしょう。
これに対する回避策はありますか?