web-dev-qa-db-ja.com

どこのように私はVimのレジスタを使うのですか?

レジスタを使用しているインスタンスが1つだけであることを知っているだけです。 CtrlR* それによって私はクリップボードからテキストを貼り付けます。

レジスタの他の用途は何ですか?使い方は?

VIレジスタについて知っていることすべて(vi 7.2に集中しましょう) - 私たちと共有してください。

878
vehomzzz

Vimのレジスタを使うと、その中に格納されているテキストに対してアクションやコマンドを実行できます。レジスタにアクセスするには、コマンドの前に"aを入力します。ここで、aはレジスタの名前です。現在の行をレジスタkにコピーする場合は、次のように入力します。

「キイ

または、大文字を使用してに追加できます。

「キイ

その後、ドキュメントを移動して、それを使用して他の場所に貼り付けることができます。

"キロ

Linuxでシステムクリップボードから貼り付けるには

"+ p

Windows上のシステムクリップボード(またはLinux上の「マウスハイライト」クリップボード)から貼り付けるには

"* p

現在定義されているすべてのレジスタにアクセスするには

:reg

1098
FModa3

0レジスタを見つけたとき、私は嬉しかったです。特定のレジスタに割り当てずにテキストをヤンクすると、デフォルトの0レジスタに保存されるだけでなく、"レジスタにも割り当てられます。 0"レジスタ間の差は唯一0デフォルトのレジスタは、テキストが移入されたのに対し、ヤンクテキストが移入使用して削除されていることであるd/D/x/X/c/C/s/Sコマンド。

テキストをコピーしたり、何かを削除したり、コピーしたテキストに置き換えたりするときに便利です。次の手順で例を示します。

  • コピーしたいテキストをy[motion]でヤンクします - このテキストは"および0レジスタに保存されます
  • 置換したいテキストをd[motion]に削除します - このテキストは" registerに保存されます
  • ヤンクテキストを"0pで貼り付けます

ここで、"は、次のコマンドにレジスタを使用するためのコマンドです。

最後のステップで、デフォルトのレジスタから(pを使用して)貼り付けた場合は、削除したテキストが使用されます(おそらく意図したものではありません)。

pまたはPはデフォルトレジスタから貼り付けます。これに相当するものは""p(または""P)であり、"0は最後のヤンクを保持し、"1は最後の削除または変更を保持します。

詳しくは :help registers をご覧ください。

734
nelstrom

レジスタに関する私のお気に入りの部分の1つは、それらをマクロとして使用することです。

タブ区切りの値ファイルを扱っているとしましょう。

ID  Df  %Dev    Lambda
1   0   0.000000    0.313682
2   1   0.023113    0.304332
3   1   0.044869    0.295261
4   1   0.065347    0.286460
5   1   0.084623    0.277922
6   1   0.102767    0.269638
7   1   0.119845    0.261601

これで、%Devフィールドの末尾にパーセント記号を追加する必要があると判断しました(2行目以降)。次のように(任意に選択された)mレジスタに単純なマクロを作ります。

  1. qmmレジスタでマクロの記録を開始します。

  2. EE:3列目の末尾に移動します。

  3. a:この列の最後に追加するモードを挿入します。

  4. %:追加したいパーセント記号を入力してください。

  5. <ESC>:コマンドモードに戻ります。

  6. j0:次の行の先頭へ.

  7. q:マクロの記録をやめる

現在の行でこのマクロを実行するには@mと入力するだけです。さらに、@@を入力して繰り返すか、[email protected]を100回入力します。人生はなかなか良さそうです。

この時点では、「 待ってください。このチェックはレジスタとの関係がありますか ?」

優れた点"mpと入力してmレジスタの内容に何があるのか​​調べてみましょう。その結果、次のようになります。

EEa%<ESC>j0

一見すると、あなたが誤ってメモ帳でバイナリファイルを開いたように見えますが、一見すると それは私たちのマクロの正確な文字シーケンスです!

あなたは好奇心旺盛な人なので、面白いことをして、古い!を退屈させる代わりに%を挿入するためにこのテキスト行を編集しましょう。

EEa!<ESC>j0

それではB"nyEとタイプしてこれをnレジスタにヤンクしましょう。それから、キックのためだけに、@n....を使ってデータの行でnマクロを実行しましょう。

OMG、ITが!を追加

基本的に、マクロを実行することは、そのマクロのレジスタ内の正確な一連のキーを押すのと同じです。それがクールな登録トリックではない場合、私は私の帽子を食べるよ。

312
Francisco

その他の便利なレジスタ:

"*または"+ - システムクリップボードの内容

"/ - 最後の検索コマンド

": - 最後のコマンド.

Vimマクロは、マクロを記録するときに使われるキーストロークのリストにすぎないので、編集することができます。そのため、テキストファイルにマクロを書いて(マクロ a を書くために"apを使って)編集し、"ay$を使ってそれらをレジスタにロードすることができます。便利なマクロを保存するための良い方法です。

96
Anthony Roy

ブラックホールレジスタ _はレジスタの/dev/nullです。

デフォルトのレジスタを更新せずに単一の文字を削除できるようにvimrcで使用します。

noremap x "_x

そして、デフォルトのレジスタを更新せずにビジュアルモードで貼り付けます。

vnoremap p "_dP
71
mrucci

レジスタの内容をexモードのコマンドに貼り付けたい場合は、<C-r><registerletter>を押してください。

なぜあなたはこれを使うのですか?長い文字列を検索して置換したいので、ビジュアルモードでそれを選択し、検索/置換表現:%s/[PASTE YANKED PHRASE]//gを入力して今日に進みました。

Exモードで1つのWordだけを貼り付ける場合は、exモードに入る前にカーソルがその上にあることを確認し、exモードでWordを貼り付けるときに<C-r><C-w>を押します。

49
agscala

秘密の達人レジスタは式=レジスタだと思います。クリエイティブマッピングに使用できます。

:inoremap  \d The current date <c-r>=system("date")<cr>

上記のようにシステムと組み合わせて使うことも、カスタムVimL関数などから応答を得ることもできます。

またはアドホックなものだけ

<c-r>=35+7<cr>
42
michael

クールなトリックは、最後の削除/変更を貼り付けるために"1pを使用し、その後の削除を貼り付けるために.を繰り返し使用することです。つまり、"1p...は基本的に"1p"2p"3p"4pと同等です。

これを使って一握りの行を逆順に並べることができます:dddddddddd"1p....

35
naught101

Vimのヘルプページから:

CTRL-R {0-9a-z"%#:-=.}                  *c_CTRL-R* *c_<C-R>*
        Insert the contents of a numbered or named register.  Between
        typing CTRL-R and the second character '"' will be displayed
        <...snip...>
        Special registers:
            '"' the unnamed register, containing the text of
                the last delete or yank
            '%' the current file name
            '#' the alternate file name
            '*' the clipboard contents (X11: primary selection)
            '+' the clipboard contents
            '/' the last search pattern
            ':' the last command-line
            '-' the last small (less than a line) delete
            '.' the last inserted text
                            *c_CTRL-R_=*
            '=' the expression register: you are prompted to
                enter an expression (see |expression|)
                (doesn't work at the expression Prompt; some
                things such as changing the buffer or current
                window are not allowed to avoid side effects)
                When the result is a |List| the items are used
                as lines.  They can have line breaks inside
                too.
                When the result is a Float it's automatically
                converted to a String.
        See |registers| about registers.  {not in Vi}
        <...snip...>
18
Brian
  • q5は編集をレジスター5に記録します(次のqは記録を停止します)
  • :regはすべてのレジスタとそれらの中身を表示する
  • @ 5実行レジスター5マクロ(編集内容の記録)
16
fpmurphy

私はvimウィンドウのテキストをgrepするためにデフォルトのレジスタを使います。

  1. ヤンクテキスト
  2. :!grep "<CTRL-R>0"<CR>
14
Matt Mendell

コマンド内のレジスタを @とともに使用します。例えば。:

echo @a
echo @0
echo @+

コマンドでそれらを設定します。

let @a = 'abc'

"apabcを貼り付けます。

混乱の大きな原因は、デフォルトレジスタ"です。それが働く方法を知ることは重要です。ほとんどの場合、デフォルトレジスタを使用しない方がはるかに優れています。 Vimのドキュメントからの説明:

Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g.  "xdd).  This is like the unnamed register is pointing
to the last used register.

したがって、デフォルトのレジスタは実際には最後に使用されたレジスタへのポインタです。あなたが何かを削除したりヤンクしたりすると、このレジスタは他のレジスタを指すようになります。あなたはレジスタをチェックすることによってそれをテストすることができます。デフォルトのレジスタとまったく同じ別のレジスタが常にあります。ヤンクレジスタ("0)、最初の削除レジスタ("1)、小さな削除レジスタ("-)、または削除またはヤンクに使用されたその他のレジスタです。

唯一の例外はブラックホールレジスタです。 Vim docは言う:

An exception is the '_' register: "_dd does not store the deleted text in any
register.

通常は、直接使用するほうがはるかに賢明です:"0"-および"1-"9デフォルトレジスタまたは名前付きレジスタ。

8
Catalin Ciurea

見落とされがちなレジスタの1つは「。」です。どのように挿入されたかに関わらず、最後に挿入されたテキストを含むドットレジスタ。例えばct](change till)。それから、あなたはそれを他の場所に挿入する必要があることに気づきますが、ドットリピート方法は使えません。

 :reg .
 :%s/fred/<C-R>./
6
zzapper

私のお気に入りの登録は':'登録です。通常モードで@:を実行すると、以前に実行したexコマンドを繰り返すことができます。

3
siu

私の友人のBrianがこれに関する包括的な記事を書きました。トピックの使い方の素晴らしい紹介です。 https://www.brianstorti.com/vim-registers/ /

1
Madis Nõmme