回答:
はい。ヒットCtrl- Rその後"。ヤンクしたものにリテラル制御文字がある場合は、Ctrl- R、Ctrl- O、を使用します"。
ここでは、レジスタを使用して何ができるかについて説明します。レジスターでできることは並外れており、レジスターの使い方を知ったら、それなしでは生きられません。
レジスタは基本的に文字列の格納場所です。Vimにはさまざまな方法で機能する多くのレジスタがあります。
0
(ヤンクレジスタ:レジスタy
を指定せずに通常モードで使用すると、ヤンクテキストがそこに移動し、デフォルトのレジスタにも送信されます)、1
へ9
(シフトレジスタの削除、c
またはなどのコマンドを使用すると、削除されたd
ものはレジスタ1に移動し、レジスタ1にあったものはレジスタ2に移動するなど)"
(デフォルトのレジスタ、名前なしレジスタとも呼ばれます。これは"、Ctrl- R、、")a
z
自分で使用するためにto を使用します(A
to Z
は、対応するレジスターへの追加用です)。_
(/dev/null
(Unix)またはNUL
(Windows)のように動作しますが、書き込むことはできますが破棄され、そこから読み取るときは常に空です)、-
(小さな削除レジスタ)、/
(検索パターンレジスタ、あなたが持つテキストを探したときに更新され/
、?
、*
または#
例えば、あなたはまた、動的に検索パターンを変更するには、それに書き込むことができます)、:
(Q
またはを介して最後のVimLタイプコマンドを保存:
、読み取り専用)、+
および*
(システムクリップボードレジスタ、それらに書き込んでクリップボードを設定し、そこからクリップボードの内容を読み取ることができます):help registers
完全なリファレンスについては、を参照してください。
いつでも、を使用:registers
してすべてのレジスタの内容を表示できます。このコマンドの同義語と省略形は:display
、:reg
と:di
です。
挿入モードまたはコマンドラインモードでは、Ctrl- Rレジスタ名に加えて、このレジスタの内容を挿入します。それらを文字どおりに挿入したい場合(自動インデントなし0x08
、バックスペースなどの制御文字の変換なし)、Ctrl- R、Ctrl- O、レジスタ名を使用できます。詳細については:help i_CTRL-R
、以下の段落を参照してください。
しかし、次のこともできます(そして、私はおそらくレジスタの多くの使用法を忘れていました)。
通常モードでを押し":pます。vimで使用した最後のコマンドがバッファーに貼り付けられます。
分解しましょう:"
次のヤンク、削除、または貼り付け操作中に使用するレジスタを選択できるノーマルモードコマンドです。したがって":、コロンレジスタを選択します(最後のコマンドを格納します)。次にp、あなたがすでに知っているコマンドで、レジスターの内容を貼り付けます。
cf. :help "
、:help quote_:
VimLファイル(たとえば.vimrc
)を編集していて、今すぐ連続する2、3行を実行したいとしますyj:@"Enter。
ここでは、yj現在の行と次の行をヤンクします(これはjが行単位の動きだからですが、これはこの回答の範囲外です)、デフォルトレジスタ(名前なしレジスタとも呼ばれます)に入れます。次に、:@
Exコマンドは、引数として指定されたレジスタに保存されているExコマンドを再生"
し、名前のないレジスタを参照する方法です。関連するこの回答の上部も参照してください。
"
ここで使用されている(レジスタ名)を、"
ノーマルモードコマンドである前の例のと混同しないでください。
cf. :help :@
そして:help quote_quote
挿入モードで最後の検索パターンをファイルに挿入するか、コマンドラインにCtrl- R、を使用して挿入します/。
cf. :help quote_/
、help i_CTRL-R
当然の結果:検索パターンを維持するが、代替の追加:/
Ctrl- 、。R/ \|alternative
ビジュアルモードで行の真ん中にある2つの単語を選択し、でヤンクしましたy
。これらは名前のないレジスターにあります。次に、現在の場所のすぐ下に、次の2つの単語を含む新しい行を開きます:pu
。これはの省略形です:put "
。この:put
コマンドは、多くのExコマンドと同様に、行単位でのみ機能します。
cf. :help :put
あなたも行っている可能性::call setreg('"', @", 'V')
それからp
。setreg
関数は、二番目の引数の内容で初期化(および名前を持つ変数としてレジスタを使用することができ、名前を(文字列として)最初の引数として指定されたレジスタを設定VIMLのレジスタ名である)、及び行ごとに3番目の引数で指定されたモードに変換します。文字ごとに何もせず、ブロックごとにリテラルにします。@x
x
V
^V
cf. :help setreg()
。逆の機能があるgetreg()
とgetregtype()
。
qa
... q
でマクロを記録した:echo @a
場合は、入力した内容が示され、@a
マクロが再生されます(おそらく、そのマクロを知っていて、繰り返しのタスクを回避するために非常に役立ちます)。
cf. :help q
、help @
前の例の結果:8go
クリップボードにある場合@+
、クリップボードの内容をマクロとして再生し、ファイルの8番目のバイトに移動します。実際、これはほとんどすべてのレジスタで機能します。最後に挿入された文字列がdd
挿入モードだった場合、@.
(.
レジスタには最後に挿入された文字列が含まれているため)行が削除されます。(Vimのドキュメントは、それは、レジスタと述べているので、この点で間違っている#
、%
、:
と.
だけで動作しますp
、P
、:put
およびCtrl- R)。
cf. :help @
:@
(レジスターからVimコマンドを再生するコマンド)と@
(レジスターから通常モードのコマンドを再生する通常モードコマンド)を混同しないでください。
注目すべき例外は@:
です。コマンドレジスタには最初のコロンも含まれず、最後のキャリッジリターンも含まれていません。ただし、通常モードで@:
は、レジスターを通常モードで再生しようとせずに、Exコマンドとして解釈して、期待どおりに動作します。したがって、最後のコマンドがであった:e
場合、レジスターにはファイルe
が含まれていますが@:
、ファイルを再ロードしますが、単語の終わりには移動しません。
cf. :help @:
実行する前に、通常モードで何をするかを示します@='dd'
Enter。=
キーを押すとすぐに、Vimは式の評価に切り替わります。式を入力してを押すと、VimはEnterそれを計算し、結果はレジスターの内容として機能します。もちろん、レジスタ=
は読み取り専用で、ワンショットです。使い始めるたびに、新しい表現を入力する必要があります。
cf. :help quote_=
結果:コマンドを編集していて、コマンドラインに現在のバッファーの一部の行を挿入する必要があることに気付いた場合は、Esc!を押さないでください。Ctrl-を使用しR =getline(58)
Enterます。その後、コマンドライン編集に戻りますが、58行目の内容が挿入されています。
検索パターンを手動で定義します。 :let @/ = 'foo'
cf. :help :let
これを行うと、/
パターンでエスケープする必要がないことに注意してください。ただし、一重引用符はすべて二重にする必要があります。
始まるすべての行をコピーしfoo
、その後含むすべての行bar
、これらのコマンドをクリップボードに、チェーン:qaq
(リセットして内部の空のマクロを格納するレジスタ)を、、、。:g/^foo/y A
:g/bar/y A
:let @+ = @a
大文字のレジスタ名を使用すると、レジスタが追加モードで機能します
より良い方法として、でQ
再マッピングされていない場合はmswin.vim
、でExモードを開始しQ
、実際には「Exコマンド」と呼ぶ方がよい「コロンコマンド」をチェーンし、と入力して通常モードに戻りますvisual
。
cf. :help :g
、:help :y
、:help Q
ダブルスペースファイル::g/^/put _
。これは、ブラックホールレジスタの内容(読み取り時には空ですが、書き込み可能で、のように動作します/dev/null
)を各行の後に行ごとに配置します(すべての行に始まりがあるため!)。
foo
各行の前にを含む行を追加します:g/^/-put ='foo'
。これは、式レジスタの賢い使い方です。ここで-
、はの同義語です.-1
(cf. :help :range
)。:put
行の後にテキストを置くので、前のテキストに作用するように明示的に指示する必要があります。
バッファ全体をシステムクリップボードにコピーします:%y+
。
cf. :help :range
(%
一部)および:help :y
。
マクロをmisrecordedしている場合は、次のように入力することができます:let @a='
Ctrl- R =replace(@a,"'","''",'g')
Enter '
それをして編集。これにより、register a
に格納されているマクロの内容が変更されます。ここでは、式レジスタを使用してそれを行う方法を示します。
行った場合はdddd
、uu
元に戻すために行うことがあります。ではp
、あなたは最後の削除された行を得ることができます。しかし、実際には、からまでのレジスタ@1
を使用して、最大9つの削除を回復することもできます@9
。
さらに良いことに、あなたがしなければ"1P
、その後、.
通常モードで再生されます"2P
、というように。
cf. :help .
そして:help quote_number
挿入モードで現在の日付を挿入する場合:Ctrl- R=strftime('%y%m%d')
Enter。
cf. :help strftime()
もう一度、混乱を招く可能性のあるもの:
:@
レジスタの内容をvimscriptとして解釈し、それをソースにするコマンドラインコマンドです。@
レジスタの内容を通常モードのキーストロークとして解釈する通常モードのコマンド(:
レジスタを使用する場合を除き、最初のコロンなしで最後に再生されたコマンドが含まれます。この場合、コロンも再入力したかのようにコマンドを再生し、最終的なリターンキー)。
"
通常モードのコマンドで、ヤンク、貼り付け、削除、修正などのレジスタを選択できます。
"
は有効なレジスタ名(デフォルト、または名前のないレジスタ)でもあるため、レジスタ名を必要とするコマンドの引数として渡すことができます使用できるシステムクリップボードである何かを貼り付けるには、SHIFT-を使用しますINS。
これはWindowsで動作しますが、Linuxでも動作すると思います。
:!rm -rf /<cr>
、それが実行されます。代わりにレジスタを使用してください!
shift-ins
がより簡単だとは思わないctrl-R+*
?もちろん、これはgvimを使用している場合です。あなたが別のマシンに接続されたターミナルにいて、クリップボードから何かを貼り付けたい場合、あなたはより良い何かを知っていますかshift-ins
?そのような状況ではレジスターが機能しないためです。コメントやその他のことを行う前に考えてください(反対投票など)。
「ヤンクしたテキストをVimコマンドラインに貼り付けたいのですが。」
上位投票の回答は非常に完全ですが、私はコマンド履歴を編集することを好みます。
通常モードでは、次のように入力しますq:
。これにより、通常のvimコマンドで編集および検索できる最近のコマンドのリストが表示されます。一番下の空のコマンドラインから始めます。
記事が要求する正確なことについては、ヤンクした行(または何でもヤンクしたもの)をコマンドラインに貼り付け、テキストをヤンクしてからq:p
(コマンド履歴編集モードにしてから、ヤンクしたテキストを新しいコマンドに(p)utしてください)行。自由に編集しenterて実行します。
コマンド履歴モードを終了するには、これは逆です。コマンド履歴の通常モードで、次のように入力します::q
+enter
システムクリップボードからVimコマンドライン(「コマンドモード」)に何かを貼り付けるには、Ctrl+にR続けてを使用し+ます。私にとって、少なくともUbuntuではShift+ Insは機能しません。
PSは:なぜ私はわからないCtrl+ Rが続く*と、理論的に同じである、Ctrl+がR続い+常に動作するようには思えません。私はその+バージョンを検索して発見しましたが、少なくとも私のボックスでは、常に機能しているようです。
同様の問題がありました。選択したテキストがコマンドで終わるようにしたかったのですが、それを貼り付けることには依存していませんでした。マッピングを記述しようとしていたコマンドは次のとおりです。
:call VimuxRunCommand("python")
このプラグインのドキュメントは、文字列リテラルの使用のみを示しています。二重引用符を含むテキストを選択しようとすると、次のように機能しなくなります。
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
これを回避するには、次を使用してマクロの内容を参照します@
。
vnoremap y:call VimuxRunCommand(@")<cr>
名前のないレジスタの内容を渡し、二重引用符と複数行のエッジケースで動作します。
@
vimuxコマンドにキャラクターを送ります。考える@
以下の二重引用符をエスケープとして、それはレジスタとしての代わりに、通常の文字として扱われています。のvnoremap
私が定義したので、それが選択されたテキストをヤンクし、その後隣接ペインの実行インタプリタに送る、vimuxコマンドにそれを貼り付け、ビジュアルモードでアクティブです。スクリプトを操作して、キーストロークを数回使ってスクリプトの一部をテストするのに最適です。
OS X
Mac OS XでVimを使用している場合、残念ながら古いバージョンが付属しており、クリップボードオプションには対応していません。幸い、Homebrewはこの問題を簡単に解決できます。
Vimをインストールします。
brew install vim --with-lua --with-override-system-vi
VimのGUIバージョンをインストールします。
brew install macvim --with-lua --with-override-system-vi
端末を再起動して有効にします。
次の行を追加します ~/.vimrc
set clipboard=unnamed
これで、Vimで行をコピーしyy
てシステム全体に貼り付けることができます。
コンテキストについては、この情報は、デフォルトのオプションを使用した、Linux Mintでの、プラグインなしの.vimrc Vim 7.4の動作なしの、すぐに使用できる状態から取得されます。
いつでもマウスでテキストを選択するVか(またはv、「または」を使用して「*レジスターに選択を配置」し、Shift+ Ctrl+を使用してコマンドラインに貼り付けることができます。v。
タイピングCtrl+をrコマンドラインでは、レジスタ名のプロンプトが発生します。したがって、入力:CTRL-r*すると、コンテンツレジスタ*がコマンドラインに配置されます。「*」だけでなく、任意のレジスタを貼り付けます。:help c_CTRL-R
。
さらに、マウスの中央ボタンがコマンドラインに貼り付けられます。
見る :help->quote-plus
X Windowが選択を処理する方法の説明については、をして。そのままの状態のVim(ここでも、Linux MintのVim 7.4)でも、マウスの左ボタンで行った選択は、マウスの中央ボタンを使用してコマンドラインに貼り付けることができます。
さらに、マウスの中央ボタンは、Vimで選択されたテキストを他の多くのX Windowアプリケーションに貼り付けます。GUIのアプリケーション(FirefoxやThunderbirdなど)でも、コマンドラインにテキストを貼り付けることができます。 。
追加情報については:help-> x11-selectionを参照してください。
tl; dr
最初に:CTRL-rアプローチを試してから、他に必要な場合はShift+ Ctrl+ vまたはマウスの中央ボタンを使用してください。
混乱する可能性があることは認められています。
"[a-z]y
:テキストを[az]レジスタにコピーします
:!
編集コマンドに移動するために使用します
Ctrl+ R:コピーしたものを貼り付けるには、レジスタIDに従います。
CentOS 7に使用されていました。
2つの値が2つの異なるレジスター(例えば、register a
とregister b
)にヤンクされている場合は、単に変数c
を設定して、それに対して操作を実行できます。
たとえば:set c = str2float(@a) + str2float(@b)
、c
どこにでもコンテンツを貼り付けることができます。
例えば、INSERTモードの一方で、CTRL + R
その後、入力=
表現レジスタに入力し、ちょうど入力するc
等号の後にして、ENTERを押します。これで、合計a
とb
レジスタ。
これらすべてをマクロに記録して繰り返すことができます!
このstr2float
関数は、浮動小数点数で作業している場合に使用され、そうでない場合は整数を取得します。
これが慣用的であるかどうかはわかりませんが、2つの数値を続けて追加し、さらに500行繰り返す必要がある私の場合にはうまくいきました。