1

次の 2 つのブロックがあるとします。

1
23
456

hello..
world world
codecode

そして、次のブロックが必要です ( 1hello..の間、間にスペースはありません):

1hello..
23world world
456codecode

一番速い方法は何ですか?


Windows XPおよびWindows 7でgvim7.3.46を使用しました

これは私の _vimrc です

set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

set diffexpr=MyDiff()
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let eq = ''
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      let cmd = '""' . $VIMRUNTIME . '\diff"'
      let eq = '"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction

を使用C-r"しましたが、うまくいきませんでした。

1
23
456
hello..
world world
codecode

C-qy、を使用C-pしました。結果は次のとおりです。

1
23
456

1  hello..
23 world world
456codecode
4

3 に答える 3

3
  1. にカーソルを合わせます1

  2. ヒット<C-v>してビジュアルブロックモードに入ります。

  3. カーソルを下に移動して456ヒット$し、ブロック全体を選択します。

  4. ヒットyしてそのブロックをヤンクします。

  5. にカーソルを置きhますhello

  6. ヒットP

于 2013-07-05T07:28:25.527 に答える
3

ビジュアル ブロック モードを使用します。次のようにします。

  1. 最初のブロックの開始時に、 を押し<C-v>てビジュアル ブロック モードに入ります。
  2. 関連する行を選択し、 を押し$て選択範囲を行末まで拡張します。
  3. を押しdて最初のブロックを削除します。これもコピーします。
  4. 次に、2 番目のブロックの先頭で を押しPて、最初のブロックを 2 番目のブロックの前にスペースを入れずに貼り付けます。

最初の行範囲は空になるので、それらの行が不要な場合は削除する必要があります。

于 2013-07-05T07:29:14.407 に答える
1

再帰マクロを使用して 2 つのブロック間を行き来し、行を削除して結合します。

qq}jdd''pkgJj@qq

注目すべきキーストローク:

  • ''直前にジャンプした行に戻ります
  • @qqの定義内からマクロを呼び出しますq
  • gJ間にスペースを入れずに 2 つの行を結合します

再帰マクロ

于 2013-07-05T08:59:59.457 に答える