レジスタを使用するインスタンスを 1 つだけ知っているのはCtrlR*、クリップボードからテキストを貼り付ける方法です。
レジスタの他の用途は何ですか? それらを使用する方法?
VI レジスタについて知っていることはすべて (vi 7.2 に焦点を当てましょう) -- 私たちと共有してください。
Vim のレジスタを使用すると、レジスタに保存されているテキストに対してアクションまたはコマンドを実行できます。レジスタにアクセスするには"a
、コマンドの前にタイプします。ここa
で、 はレジスタの名前です。現在の行を register にコピーする場合は、次のk
ように入力できます
"kyy
または、大文字を使用してレジスタに追加できます
"Kyy
その後、ドキュメント内を移動して、別の場所に貼り付けることができます。
"kp
Linux でシステム クリップボードから貼り付けるには
"+p
Windows のシステム クリップボード (または Linux の「マウス ハイライト」クリップボード) から貼り付けるには
"*p
現在定義されているすべてのレジスタ タイプにアクセスするには
:reg
0
レジスターを発見したときはうれしかったです。テキストを特定のレジスタに割り当てずにヤンクすると0
、デフォルトのレジスタに保存されるだけでなく、レジスタに割り当てられます"
。0
レジスタと"
レジスタの違いは、0
ヤンクされたテキストのみが入力されるのに対し、デフォルト レジスタには / / / / / / / コマンドを使用して削除されたd
テキストD
もx
入力X
さc
れるC
ことs
ですS
。
これは、テキストをコピーしたり、何かを削除したり、コピーしたテキストに置き換えたりするときに便利です。次の手順は、例を示しています。
y[motion]
- このテキストは保存され"
、0
登録されますd[motion]
に保存されます"
"0p
ここ"
で、次のコマンドにレジスタを使用するコマンドです。
最後のステップで、デフォルトのレジスターから (を使用してp
) 貼り付けようとすると、削除したばかりのテキストが使用されます (おそらく意図したものではありません)。
p
またはP
、デフォルト レジスタから貼り付けます。同等のロングハンドは""p
(または""P
) であり"0
、最後のヤンクを"1
保持し、最後の削除または変更を保持します。
詳細については、 を参照してください:help registers
。
レジスタに関する私のお気に入りの部分の 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
ます。
押す: :レジスタqm
の下にマクロの記録を開始します。m
EE
: 3 列目の最後に移動します。
a
: この列の末尾に追加する挿入モード。
%
: 追加するパーセント記号を入力します。
<ESC>
: コマンド モードに戻ります。
j0
: 次の行の先頭に移動します。
q
: マクロの記録を停止
入力するだけ@m
で、現在の行でこのマクロを実行できます。さらに、@@
繰り返し入力したり100@m
、これを 100 回実行したりできます。人生はかなり順調に見えます。
この時点で、「しかし、これはレジスターと何の関係があるのでしょうか?」と言うべきです。
優れた点。m
と入力してレジスタの内容を調べてみましょう"mp
。次に、以下を取得します。
EEa%<ESC>j0
最初は、誤ってバイナリ ファイルをメモ帳で開いたように見えますが、よく見ると、これはマクロ内の文字の正確なシーケンスです!
あなたは好奇心旺盛なので、何か面白いことをして、このテキスト行を編集して!
、退屈な古い の代わりにa を挿入してみましょう%
。
EEa!<ESC>j0
n
次に、と入力して、これをレジスターにヤンクしましょうB"nyE
。次に、ちょっとしたきっかけとして、 ...n
を使用して、データの行でマクロを実行してみましょう。@n
を追加しました!
。
基本的に、マクロを実行することは、そのマクロのレジスタにあるキーの正確なシーケンスを押すことに似ています。それがクールなレジスター トリックでない場合は、帽子を食べます。
その他の便利なレジスタ:
"*
または"+
- システムのクリップボードの内容
"/
- 最後の検索コマンド
":
- 最後のコマンドライン コマンド。
vim マクロを使用すると、マクロを記録するときに使用されるキーストロークの単なるリストであるため、マクロを編集できることに注意してください。したがって、マクロをテキスト ファイル"ap
に書き込み (マクロaを使用して)、編集し、 を使用してレジスタにロードすることができます"ay$
。便利なマクロを保存する良い方法。
ブラックホール レジスタ _
は、/dev/null
レジスタの です。
デフォルトのレジスタを更新せずに単一の文字を削除できるように、vimrc で使用します。
noremap x "_x
デフォルトレジスタを更新せずにビジュアルモードで貼り付けるには:
vnoremap p "_dP
ex-mode コマンドでレジスタの内容を貼り付けたい場合は、 を押します<C-r><registerletter>
。
なぜこれを使うのですか?長い文字列を検索して置換したかったので、ビジュアル モードでそれを選択し、検索/置換式:%s/[PASTE YANKED PHRASE]//g
を入力して、その日を続けました。
ex モードで単語を 1 つだけ貼り付けたい場合は、ex モードに入る前にカーソルがその単語の上にあることを確認し、ex モードで を押して<C-r><C-w>
単語を貼り付けます。
より便利にするために:
cnoremap <c-g> <c-r>"
cnoremap <C-Right> <c-r><c-w>
クールなトリックは、 を使用"1p
して最後の削除/変更 ( を貼り付け、次に.
を繰り返し使用して後続の削除を貼り付けることです。つまり、"1p...
は基本的に"1p"2p"3p"4p
.
これを使用して、いくつかの行を逆順に並べ替えることができます。
dddddddddd"1p....
秘伝の達人レジスターは=レジスターという表現だと思います。クリエイティブなマッピングに使用できます。
:inoremap \d The current date <c-r>=system("date")<cr>
上記のようにシステムと組み合わせて使用したり、カスタム VimL 関数などから応答を取得したりできます。
または、次のようなアドホックなもの
<c-r>=35+7<cr>
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...>
デフォルトのレジスタを使用して、マウスに手を伸ばすことなく、vim ウィンドウ内のテキストを grep します。
:!grep "<CTRL-R>0"<CR>
見落とされがちなレジスタの 1 つが「.」です。どのように挿入されたかに関係なく、最後に挿入されたテキストを含むドット レジスタ。次に、別の場所に挿入する必要があることに気付きますが、ドット リピート メソッドは使用できません。
:reg .
:%s/fred/<C-R>./
私のお気に入りのレジスターは':'
レジスターです。@:
通常モードで実行すると、以前に実行した ex コマンドを繰り返すことができます。
したがって、いくつかのコマンドを確認してからvimrc:MY_commandXXXXX
に入れることができますMY_commandXXXXX
混乱の大きな原因は、デフォルトのレジスタ"
です。それがどのように機能するかを知ることが重要です。ほとんどの場合、デフォルト レジスタを使用しないほうがよいでしょう。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
通常は、 direct:"-
と"1-"9
デフォルト レジスタまたは名前付きレジスタを使用する方がはるかに優れています。
私のお気に入りの機能は、大文字を使用してレジスターに追加できる機能です。たとえば、インポートのサブセットをバッファー X からバッファー Y に移動するとします。
x1
バッファ Xの行に移動します。"ayy
に置き換えるために入力します。a
x1
x5
。"Ayy
(大文字の A)と入力します。x5
a
"ap
して貼り付けます<content of line x1>
<content of line x5>