1022

レジスタを使用するインスタンスを 1 つだけ知っているのはCtrlR*、クリップボードからテキストを貼り付ける方法です。

レジスタの他の用途は何ですか? それらを使用する方法?

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

4

17 に答える 17

1311

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

"kyy

または、大文字を使用してレジスタに追加できます

"Kyy

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

"kp

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

"+p

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

"*p

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

:reg
于 2009-09-30T13:12:34.540 に答える
850

0レジスターを発見したときはうれしかったです。テキストを特定のレジスタに割り当てずにヤンクすると0、デフォルトのレジスタに保存されるだけでなく、レジスタに割り当てられます"0レジスタと"レジスタの違いは、0ヤンクされたテキストのみが入力されるのに対し、デフォルト レジスタには / / / / / / / コマンドを使用して削除されたdテキストDx入力XcれるCことsですS

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

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

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

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

pまたはP、デフォルト レジスタから貼り付けます。同等のロングハンドは""p(または""P) であり"0、最後のヤンクを"1保持し、最後の削除または変更を保持します。

詳細については、 を参照してください:help registers

于 2009-10-01T14:42:07.643 に答える
355

レジスタに関する私のお気に入りの部分の 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. 押す: :レジスタqmの下にマクロの記録を開始します。m

  2. EE: 3 列目の最後に移動します。

  3. a: この列の末尾に追加する挿入モード。

  4. %: 追加するパーセント記号を入力します。

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

  6. j0: 次の行の先頭に移動します。

  7. q: マクロの記録を停止

入力するだけ@mで、現在の行でこのマクロを実行できます。さらに、@@繰り返し入力したり100@m、これを 100 回実行したりできます。人生はかなり順調に見えます。

この時点で、「しかし、これはレジスターと何の関係があるのでしょうか?」と言うべきです。

優れた点。mと入力してレジスタの内容を調べてみましょう"mp。次に、以下を取得します。

EEa%<ESC>j0

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

あなたは好奇心旺盛なので、何か面白いことをして、このテキスト行を編集して!、退屈な古い の代わりにa を挿入してみましょう%

EEa!<ESC>j0

n次に、と入力して、これをレジスターにヤンクしましょうB"nyE。次に、ちょっとしたきっかけとして、 ...nを使用して、データの行でマクロを実行してみましょう。@n

を追加しました!

基本的に、マクロを実行することは、そのマクロのレジスタにあるキーの正確なシーケンスを押すことに似ています。それがクールなレジスター トリックでない場合は、帽子を食べます。

于 2011-08-10T22:34:54.373 に答える
108

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

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

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

":- 最後のコマンドライン コマンド。

vim マクロを使用すると、マクロを記録するときに使用されるキーストロークの単なるリストであるため、マクロを編集できることに注意してください。したがって、マクロをテキスト ファイル"apに書き込み (マクロaを使用して)、編集し、 を使用してレジスタにロードすることができます"ay$。便利なマクロを保存する良い方法。

于 2009-09-30T15:15:25.290 に答える
80

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

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

noremap x "_x

デフォルトレジスタを更新せずにビジュアルモードで貼り付けるには:

vnoremap p "_dP
于 2011-08-10T23:13:50.873 に答える
61

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>
于 2011-08-10T21:32:14.777 に答える
47

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

これを使用して、いくつかの行を逆順に並べ替えることができます。 dddddddddd"1p....

于 2012-04-11T07:00:38.220 に答える
45

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

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

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

または、次のようなアドホックなもの

<c-r>=35+7<cr>
于 2009-10-01T04:25:27.297 に答える
19

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...>
于 2011-08-10T22:07:18.050 に答える
18
  • q5 は編集内容をレジスター 5 に記録します (次の q は記録を停止します)。
  • :reg すべてのレジスタとその内容を表示
  • @5 レジスター 5 マクロの実行 (記録された編集)
于 2009-09-30T13:17:12.730 に答える
17

デフォルトのレジスタを使用して、マウスに手を伸ばすことなく、vim ウィンドウ内のテキストを grep します。

  1. テキストをヤンクする
  2. :!grep "<CTRL-R>0"<CR>
于 2011-08-11T01:09:36.160 に答える
10

見落とされがちなレジスタの 1 つが「.」です。どのように挿入されたかに関係なく、最後に挿入されたテキストを含むドット レジスタ。次に、別の場所に挿入する必要があることに気付きますが、ドット リピート メソッドは使用できません。

 :reg .
 :%s/fred/<C-R>./
于 2015-11-18T12:18:04.400 に答える
9

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

したがって、いくつかのコマンドを確認してからvimrc:MY_commandXXXXXに入れることができますMY_commandXXXXX

于 2014-08-29T20:17:15.927 に答える
8

混乱の大きな原因は、デフォルトのレジスタ"です。それがどのように機能するかを知ることが重要です。ほとんどの場合、デフォルト レジスタを使用しないほうがよいでしょう。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デフォルト レジスタまたは名前付きレジスタを使用する方がはるかに優れています。

于 2013-01-04T22:51:15.073 に答える
2

私のお気に入りの機能は、大文字を使用してレジスターに追加できる機能です。たとえば、インポートのサブセットをバッファー X からバッファー Y に移動するとします。

  1. x1バッファ Xの行に移動します。
  2. registerを line の内容"ayyに置き換えるために入力します。ax1
  3. 行に移動しますx5
  4. registerの末尾に行を追加するには、 "Ayy (大文字の A)と入力します。x5a
  5. バッファ Y に移動し、タイプ"apして貼り付けます
<content of line x1>
<content of line x5>
于 2020-10-14T22:55:16.633 に答える