私はC#開発者で、最近利用できるツールの知識を広げることに決めました。私が学ぶことにした最初のツールはVi/Vimです。これまでのところすべてが順調に進んでいますが、答えが見つからないように見える質問がいくつかあります。
一連の行をヤンクしたいとしましょう。そうする方法はたくさんありますが、行番号で行いたいと思います。私は、それが81,91y
。これを行う方法はありますか?
通常モードのg
コマンドについて少し混乱しています。それは無数のことをしているようで、gコマンドがその中核で何をするかを本当に判断することはできません。モーションコマンドなのか、他のコマンドが通常モードで実行されるための一種の「すべてをキャッチ」なのか、私は混乱しています。誰かがこれを説明してもらえますか、g
コマンドの良い説明を提供するリファレンスを教えてくれますか?
ヤンクライン81-91
:81,91y<enter>
指が:
および,
キーを見つけたくない場合、これも同様に機能します(81行目に移動し、11行をヤンクします)
81gg11yy
g
の唯一の使用は5gg
です。 5行目に移動します。 22gg
:22行目。 jimboが言ったように、これは実際には他のいくつかのコマンドの修飾子にすぎません。
完全を期すために、( http://vim.wikia.com/wiki/Power_of_g )では、コマンドモードでg
がどのように機能するかについて説明しています。
「t」を使用して、現在のカーソル位置に現在の行をコピーすることもできます。
:81,91t.<enter>
これにより、カーソルがある行の下に81〜91行が貼り付けられます。
これは、VIMの優れたリソースである http://vimcasts.org から学びました。
また、vimの相対行番号オプションを使用したいので、次のように入力できます。
:-10,-7ya a
テキストを名前付きバッファにヤンクするには.
N.B. Aを指定すると、ヤンクしているものがバッファaの現在の内容に追加されます。
同様のコマンドを使用して、テキストブロックをコピーしたり、テキストブロックを移動したりすることもできます。
:-10,-7co .
つまり、テキストの4行を10行上から現在の行の下にコピーします。
:-10,-7mo .
は、4行のテキストを10行上から現在の行の下に移動することを意味します。
G
コマンドは、カウント値を伴う場合、特定の行番号に移動します。 81G
は、81行目に表示されます。
y
コマンドは、G
のような動きと組み合わせることができます。したがって、行91まですべてをヤンクするには、y91G
を使用できます。
一緒にあなたが得る:
81Gy91G
81行目に移動し、91行目に移動しながらヤンクします。
g
は単独では何もしません。これは、一連の無関係なコマンドを保持する2つのメタコマンドの1つです。
z
はそのような別のコマンドです。
最良の解決策は、vを押して「ビジュアルモード」に入ることです。そして、行を選択した後、yを押してそれらをコピーします。次に、pを押してコピーした行を貼り付けます。
Vimの:help index
はg
を次のように説明します。
|g| g{char} extended commands, see |g| below
下にスクロール(または:help g
)リスト用。
(y
)行91から96をレジスタa
にヤンクする:91,96y a
に加えて("ap
で貼り付けられます)、ヤンクされた行はappendedでレジスタに:
:91,96y A
つまりA
レジスタの大文字化により、上書きの代わりにレジスタa
に追加操作が行われます。レジスタの大文字は常にこのように機能します。 :let @A=';'
は、a
を登録するために;
を追加します。
プラス(+)またはマイナス(-)を使用すると、現在のカーソル位置に関連する行が参照されます。
:-10,+10y b
つまり現在のカーソル位置の周りの21行をyank(y
)し、レジスタb
に入れます。
入力がないことは、実際には現在のカーソル位置も表します。つまり、次のことを意味します。
:-5,y a
上記の5行のテキストを現在のカーソル位置まで名前付きバッファーa
にヤンクし、そして:
:,+5y a
現在のカーソル位置の後の5行をバッファa
にヤンクします。
注:バッファa
にマクロがある場合は、前のyankによって上書きされただけです。yankレジスタとマクロレジスタは実際には同じものです。偶然、マクロを貼り付けて編集し、それをレジスタにヤンクして戻すことができるのはそのためです。個人的には、ヤンクには左手から届く文字を使用し、マクロには右手から届く文字を使用します。
テキストブロックを移動するには、次のようにします。
:+10,+13m.
つまり、現在のカーソルの10行先にある4行を現在の行の下に移動します。
補遺
以前、:91,95ya a
のya
を、ya{motion}
によってモーションが提供された91,95
と同義語であると混同していました。これは誤りであり、ya
の「a」は完全に不要です。私の弁護では、help yank
はya
がyank
の可能なエイリアスであることを伝えません。