回答:
Vimのレジスタを使用すると、その中に保存されているテキストに対してアクションやコマンドを実行できます。レジスターにアクセスする"a
には、コマンドの前に入力a
します。はレジスターの名前です。現在の行をregisterにコピーするk
場合は、次のように入力できます。
"kyy
または、大文字を使用してレジスタに追加できます
"Kyy
次に、ドキュメントを移動し、次を使用して他の場所に貼り付けることができます
"kp
Linuxのシステムクリップボードから貼り付けるには
"+p
Windowsのシステムクリップボード(またはLinuxの「マウスハイライト」クリップボード)から貼り付けるには
"*p
現在定義されているすべてのレジスタタイプにアクセスするには
:reg
"+
システムのクリップボードを参照する特別なレジスタです。
"*
; でアクセスできます。したがって、ファイルの終わりまでコピーするコマンドはになり"*yG
ます。
*
、「マウスハイライト」クリップボードであり+
、Ctrl-XCVクリップボードです。
+
か(大文字がないため)?
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
。
p
またはP
デフォルトのレジスタから貼り付けます。等価な表記は""p
(または""P
)になります。
"
次のコマンドにレジスターを使用するコマンドです。したがって、貼り付けコマンドにレジスタを""p
使用し、"
レジスタを"0p
使用し0
ます。
0p
現在の行の最初の文字に移動し、デフォルトのレジスタの内容から貼り付けることを意味します("
)。"p
レジスタを使用するコマンドを指定する必要があるため、不完全なコマンドになりますp
。
レジスターについて私のお気に入りの部分の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回@@
繰り返したり、タイプしたりできる100@m
!人生はかなりよさそうだ。
この時点で、「しかし、待って、これは登録者に何をすべきか?」
優れた点。とm
入力して、レジスターの内容を調べてみましょう"mp
。次に、以下を取得します。
EEa%<ESC>j0
最初は、誤ってバイナリファイルをメモ帳で開いたように見えますが、一見すると、マクロ内の文字の正確なシーケンスです。
あなたは好奇心旺盛な人なので、面白いことをして、このテキスト行を編集して!
退屈な古いの代わりにを挿入しましょう%
。
EEa!<ESC>j0
次にn
、と入力して、これをレジスターにヤンクしますB"nyE
。次に、キックのためだけに、... n
を使用してデータの行でマクロを実行し@n
ます。
OMG、ITが追加されました !
基本的に、マクロの実行は、そのマクロのレジスター内の正確なキーのシーケンスを押すようなものです。それがクールな見当のトリックではないなら、私は帽子を食べます。
+
代わりにj0
を使用して、次の行の最初の空白以外の文字に移動できます。
その他の便利なレジスタ:
"*
または"+
-システムクリップボードの内容
"/
-最後の検索コマンド
":
-最後のコマンド。
vimマクロはマクロを記録するときに使用されるキーストロークのリストにすぎないため、編集できます。テキストファイルにマクロを書くことができるように(使用して"ap
マクロの書き込みにAをして編集して、としてレジスタにロード)"ay$
。便利なマクロを保存するための素晴らしい方法。
vim --version
- -clipboard
あなたはそれを持っていない手段、+clipboard
あなたは手段を。
"*
と"+
さえクーラーです:"+
にコピーされた最後のテキスト貼り付けctrl+c
(コピーバッファ)、または何これまで使用(またはショートカットright-click>copy
)。"*
マウス(選択バッファー)で強調表示された最後のテキストを貼り付けます。したがって、で何かをコピーctrl+c
してから、マウスで他の何かを強調表示した場合、貼り付けるものを選択できます。これは、これらの2つのレジスターが同義であるWindowsでは機能しません。
"*
し、"+
年間の!システムのクリップボードにアクセスできるのはgvimだけだと思っていましたが、どうやら通常のvimもそうです!
-xterm_clipboard
についてvim --version
。インストールする簡単なパッケージはありますか?(debian / apt-get)。ありがとう。
ブラックホールレジスタ _
である/dev/null
レジスタ。
私はvimrcでこれを使用して、デフォルトのレジスターを更新せずに単一の文字を削除できるようにしています。
noremap x "_x
デフォルトのレジスタを更新せずにビジュアルモードで貼り付けるには:
vnoremap p "_dP
x
文字を転置するのに不便になります。
x
マッピングではxp
、現在のコマンドを次の文字に切り替える「コマンド」を実行できなくなります。入力ミスの修正に非常に役立ちます。またXp
、前のキャラクターと電流を切り替える必要があります。
レジスタの内容をex-modeコマンドに貼り付けたい場合は、を押します<C-r><registerletter>
。
なぜこれを使うのですか?長い文字列を検索して置換したかったので、ビジュアルモードで選択し、検索/置換式:%s/[PASTE YANKED PHRASE]//g
を入力し始めて、一日を過ごしました。
exモードで1つの単語のみを貼り付けたい場合は、exモードに入る前にカーソルがその単語の上にあることを確認してから<C-r><C-w>
、exモードでを押して単語を貼り付けます。
:
コマンドラインにテキストを貼り付けることは、今日学んだ最高のことです
/[write out your regex]<cr>
、次にjustで置き換えるのが好きs/<C-R>//replacement/
です。このようにして、置換を実行する前に正規表現に関するライブフィードバックの利点を得ることができます。
秘密の達人レジスターは、表現=レジスターだと思います。クリエイティブマッピングに使用できます。
: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...>
nmap <F2> @q
を使用します。これは、F2のマクロを保存して再生するために、を押すだけqq
です。迅速なマクロの保存と再生。
コマンドでレジスタを使用します@
。例えば:
echo @a
echo @0
echo @+
コマンドでそれらを設定します。
let @a = 'abc'
今"ap
貼り付けabc
ます。
混乱の大きな原因はデフォルトのレジスタ"
です。それが機能する方法を知ることは重要です。ほとんどの場合、デフォルトのレジスタを回避するほうがはるかに優れています。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
デフォルトのレジスターまたは名前付きレジスター。
私の友人ブライアンはこれについて包括的な記事を書いた。トピックの使い方を紹介する素晴らしいガイドだと思います。https://www.brianstorti.com/vim-registers/