一連のアクションを実行し、関数が最初にトリガーされた行に戻る Vim 関数を作成しようとしています。この動作を実行できる Vim 関数を何らかの方法で作成することは可能ですか?
たとえば、vim バッファーのどこかにいる場合、たとえば行 55 で最初の行に移動するように入力すると、 「How can I write this behavior in a Vim function?」gg
で行 55 に戻ることができます。<C-o>?
助けてくれてありがとう。
一連のアクションを実行し、関数が最初にトリガーされた行に戻る Vim 関数を作成しようとしています。この動作を実行できる Vim 関数を何らかの方法で作成することは可能ですか?
たとえば、vim バッファーのどこかにいる場合、たとえば行 55 で最初の行に移動するように入力すると、 「How can I write this behavior in a Vim function?」gg
で行 55 に戻ることができます。<C-o>?
助けてくれてありがとう。
まず、通常入力する関数ですべてを実行できます。を使用する<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.