web-dev-qa-db-ja.com

Vimヤンキング範囲

私はC#開発者で、最近利用できるツールの知識を広げることに決めました。私が学ぶことにした最初のツールはVi/Vimです。これまでのところすべてが順調に進んでいますが、答えが見つからないように見える質問がいくつかあります。

  1. 一連の行をヤンクしたいとしましょう。そうする方法はたくさんありますが、行番号で行いたいと思います。私は、それが81,91y。これを行う方法はありますか?

  2. 通常モードのgコマンドについて少し混乱しています。それは無数のことをしているようで、gコマンドがその中核で何をするかを本当に判断することはできません。モーションコマンドなのか、他のコマンドが通常モードで実行されるための一種の「すべてをキャッチ」なのか、私は混乱しています。誰かがこれを説明してもらえますか、gコマンドの良い説明を提供するリファレンスを教えてくれますか?

73
jnadro52

ヤンクライン81-91

:81,91y<enter>

指が:および,キーを見つけたくない場合、これも同様に機能します(81行目に移動し、11行をヤンクします)

81gg11yy 

gの唯一の使用は5ggです。 5行目に移動します。 22gg:22行目。 jimboが言ったように、これは実際には他のいくつかのコマンドの修飾子にすぎません。

完全を期すために、( http://vim.wikia.com/wiki/Power_of_g )では、コマンドモードでgがどのように機能するかについて説明しています。

118
hometoast

「t」を使用して、現在のカーソル位置に現在の行をコピーすることもできます。

:81,91t.<enter>

これにより、カーソルがある行の下に81〜91行が貼り付けられます。

これは、VIMの優れたリソースである http://vimcasts.org から学びました。

18
Asta

また、vimの相対行番号オプションを使用したいので、次のように入力できます。

:-10,-7ya a

テキストを名前付きバッファにヤンクするには.

N.B. Aを指定すると、ヤンクしているものがバッファaの現在の内容に追加されます。

同様のコマンドを使用して、テキストブロックをコピーしたり、テキストブロックを移動したりすることもできます。

:-10,-7co .

つまり、テキストの4行を10行上から現在の行の下にコピーします。

:-10,-7mo .

は、4行のテキストを10行上から現在の行の下に移動することを意味します。

10
Rob Wells

Gコマンドは、カウント値を伴う場合、特定の行番号に移動します。 81Gは、81行目に表示されます。

yコマンドは、Gのような動きと組み合わせることができます。したがって、行91まですべてをヤンクするには、y91Gを使用できます。

一緒にあなたが得る:

81Gy91G

81行目に移動し、91行目に移動しながらヤンクします。

7
sth

gは単独では何もしません。これは、一連の無関係なコマンドを保持する2つのメタコマンドの1つです。

zはそのような別のコマンドです。

4
Jimbo

最良の解決策は、vを押して「ビジュアルモード」に入ることです。そして、行を選択した後、yを押してそれらをコピーします。次に、pを押してコピーした行を貼り付けます。

2
Taras Vaskiv

Vimの:help indexgを次のように説明します。

|g|             g{char}            extended commands, see |g| below

下にスクロール(または:help g)リスト用。

2

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 ayaを、ya{motion}によってモーションが提供された91,95と同義語であると混同していました。これは誤りであり、yaの「a」は完全に不要です。私の弁護では、help yankyayankの可能なエイリアスであることを伝えません。

0
Paul Parker