2

の一部の行をコピーして貼り付けたいvi

私は次のようなテキストを持っています

python class1 def:
   code code code
   ...
   code code code
   last line class1

python class2 def:
   code code code
   ...
   code code code

全体をコピーしたいclass1。でやろうとしていたyNyので、 を取得する必要がNありました。つまり、クラスの行数をカウントする必要がありました。

次に、 ( python class1 def:X としましょう) とlast line class1(Y) の行番号を取得し、 を計算N=Y-Xし、クラスの最初の行に移動してyNy. ただし、行番号を取得する方法がわかりませんでした。

それで、私がどの行にいるのかを知る方法はありますか?そして一般的に、私が示したようなブロック全体をコピーして貼り付ける他の方法はありますか?

これは私のviバージョンです:

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 26 2012 16:44:45)
Included patches: 1-547
4

4 に答える 4

7

現在の行番号は で取得できます:.=Ctrl-gファイル名、列情報などの詳細を提供します...

ブロックをコピーするには、コピーする行の先頭に移動します0。ヒットvすると、ビジュアルモードが開始されます。コピーする最後の行に移動します。ヤンクy。(視覚的な選択は現在バッファにあります。)

于 2013-05-08T11:09:32.990 に答える
6
  • 通常モードのコマンドのみを使用:

    y}現在の行から次の空行までのすべてをヤンクして、Vim が「段落」と見なすものを区切ることができます。これは、コーディング スタイルによっては機能する場合と機能しない場合があります。

    「段落」の概念を引き続き使用すると、「段落」のどこからでもyip実行できます。yap

    number絶対行番号を表示できるオプションを設定できるためy10G、「ここからすべてを 10 行目にヤンクする」ことができます。

    relativenumber相対的な行番号を表示できるオプションを設定するとy5j、「ここからすべてを 5 行下にヤンクする」ことができます。

    V/foo<CR>yここから行ごとにすべてをヤンクすることができますfoo

    より一般的には、ビジュアルモードを使用して、必要なものを選択してヤンクすることができます。

    でクラスの最初の行にマークを設定しma、カーソルを最後の行に移動して実行することもできますy'a(ラブクラフトの神の名前のように聞こえます)。

  • Ex コマンドの使用:

    前述のnumberオプションでは絶対行番号が表示されるため、クラスが 10 行目で終了し、 do であることがわかります:.,10y

    前述のrelativenumberオプションは相対的な行番号を表示するため、クラスが 5 行下で終了していることがわかります:,+5y(暗黙の を削除します.)。

  • ステータスラインを使用する (または使用しない):

    :set rulerステータスバーがある場合はステータスバーの右側に、ステータスラインがない場合はコマンドラインの右側に現在の行番号を表示することができます。

  • Vim スクリプトの使用:

    line('.')現在の行の番号を取得するために使用できます。

  • カスタム テキスト オブジェクトの使用:

    インデントされたブロック、関数の引数、およびその他多くのもののために、vim.org で利用可能なカスタム テキスト オブジェクトが多数あります。Pythonクラス用のものがあるかもしれません。

rulerより一般的には、numberまたはrelativenumber永続的に設定~/.vimrcして慣れることをお勧めします。

  • rulerは最も侵略的ではありませんが、最も限定的でもあります。自分がどこにいるかはわかっていますが、ターゲットを定義したい場合にはまったく役に立ちません。

  • numberは最も古典的で、特定の行を簡単にターゲットにするために使用できます。

  • relativenumberは最初は少し奇妙ですが、 のようnumberに、特定の行をターゲットにするために簡単に使用できます。

どちらを選択するnumberrelativenumberは、私に関する限り、好みの問題です。relativenumberYMMVはとても直感的です。

于 2013-05-08T11:09:18.100 に答える
3

コマンドモードで次のことを試してください

  1. :.=画面の下部にある現在の行の行番号を返します
  2. yNyまたはNyy、現在の行を含む次の N 行をコピーします
  3. pコピーしたテキストを現在の行の後に貼り付けます

さらに、

:set nu!コマンドモードでは、各行の先頭にある行番号のオン/オフを切り替えます。

于 2013-05-08T11:10:56.517 に答える