3

一連のアクションを実行し、関数が最初にトリガーされた行に戻る Vim 関数を作成しようとしています。この動作を実行できる Vim 関数を何らかの方法で作成することは可能ですか?

たとえば、vim バッファーのどこかにいる場合、たとえば行 55 で最初の行に移動するように入力すると、 「How can I write this behavior in a Vim function?」ggで行 55 に戻ることができます。<C-o>?助けてくれてありがとう。

4

1 に答える 1

7

まず、通常入力する関数ですべてを実行できます。を使用する<C-o>には、適切なエスケープが必要です。

:execute "normal! \<C-o>"

それとは別に、専用のVimscript関数を使用することもできます。最も単純なのはcursor()、ジャンプリストを変更しないことです(line('.')元の位置を変数に保存するために使用します。ここでハードコーディングしています)。

:call cursor(55, 0)

ただし、アクションを完全に非表示にする場合は、カーソル位置を復元するだけでは不十分です。移動もビューポートに影響を与えた可能性があります。つまり、ウィンドウに表示されるバッファライン。それをそのまま維持するには、次を使用します。

:let save_view = winsaveview()
" Your actions here
:call winrestview(save_view)
" Now the window looks exactly as before.
于 2013-03-01T11:51:20.390 に答える