1

Vim を使用して、コード ブロックの途中でカーソルを移動しようとしていますが、これを行う方法がわかりません。

//cursor is for instance here.

{
    //or here

    //some code
    // .... **** move cursor here ****
    //some more code 

}

最後のアイデアは、現在の位置を保存し、コード ブロックの中央にカーソルを移動し、現在の行を画面の中央に設定し (ショートカット "zz" を使用)、次に元の場所に戻るショートカットを作成することです。保存された位置。

組み込みの vim 関数が望ましいですが、プラグインも機能します。

編集: これは c++ 用であるため、ブラケット {} に必要です。

4

3 に答える 3

4

私はそれを(素早く汚い)行った:

function! Middleize()

  " use ]M to jump to either the end of the current method if we are in it
  " or the start of the next method if we are above the method
  normal! ]M

  " we record the current line number
  let first_line = line('.')

  " we go to the other end of the method
  normal! %

  " we record the current line number
  let second_line = line('.')

  " we started either from the top or from the bottom of the method
  " so we have to take that into account when calculating the number
  " of the line we want to jump to
  if first_line < second_line
    let middle_line = first_line + ((second_line - first_line) / 2)
  else
    let middle_line = ((first_line - second_line) / 2) + second_line
  endif

  " let's go!
  execute "normal! " . middle_line . "Gzz"
endfunction

nnoremap <F5> :call Middleize()<CR>
于 2013-03-28T14:13:42.520 に答える
1

より一般的な解決策ですが、便利な場合があります-イージーモーションプラグインを使用すると、あらゆる場所を非常に正確にジャンプできます.

例えば:

初期状態

<Leader><Leader>w(デフォルト) - ' word motion '

ワードモーションが有効

g

真ん中にカーソル

次に、ジャンプして戻るには、同じことを逆方向に実行します (この場合、<Leader><Leader>b g.

これは、現在の行を画面の中央に設定しませんが、画面:set scrolloff=9999の中央をカーソルに合​​わせることはできます。

于 2013-03-28T13:51:49.210 に答える
0

これはあなたが望むものを正確に与えるわけではありませんが、画面に関数のテキストが表示されます(長すぎないと仮定します)。

  1. ma- 現在のカーソル位置にマークを設定します。
  2. }目的のコードが表示されるまで、(段落単位でジャンプする) を繰り返し押します。
  3. `a- 設定したマークに戻ります。

vim 用語での「段落」は、連続する非空白行のグループです。これは、コード ブロックの適切な近似値です。また、mark コマンドには任意の文字を使用できるため、一度に最大 52 個の文字をアクティブにできることに注意してください。

于 2013-03-28T14:10:23.640 に答える