1. ホーム
  2. vim

[解決済み] Vimのコマンドラインにヤンクのテキストを貼り付ける方法

2022-03-15 21:46:34

質問

Vimのコマンドラインにヤンクしたテキストを貼り付けたいのですが、どうすればいいですか?可能でしょうか?

どのように解決するのですか?

はい、ヒット Ctrl - R では " . ヤンクしたものにリテラルな制御文字がある場合は、次のようにします。 Ctrl - R , Ctrl - O , " .

ここでは、レジスターで何ができるかを解説しています。レジスターでできることは並大抵のことではなく、一度使い方を知ってしまうと、レジスターなしでは生きていけなくなります。

レジスタは基本的に文字列の保存場所です。Vim には多くのレジスタがあり、それぞれ異なる方法で機能します。

  • 0 (ヤンクレジスター: を使用する場合 y で、レジスタを指定せずに、通常モードで、ヤンクされたテキストはそこに行き、また、デフォルトのレジスタにも行く)。
  • 1 から 9 (のようなコマンドを使用する場合、レジスタをシフト消去します)。 c または d 削除されたものはレジスター1へ、レジスター1にあったものはレジスター2へ。 などです。 ),
  • " (デフォルト・レジスタ、無名レジスタとも呼ばれる。ここに " が入っています。 Ctrl - R , " ),
  • a から z を自分用にする(大文字 A から Z は対応するレジスタに追加するためのものです)。
  • _ (のように動作します。 /dev/null (Unix)または NUL (Windows)では、書き込むことはできますが、破棄され、読み出すときは常に空です)。
  • - (小型削除レジスタ)を使用します。
  • / (でテキストを探すと更新される検索パターン・レジスタ)。 / , ? , * または # 例えば、検索パターンを動的に変更するために書き込むことも可能です)。
  • : (最後に入力されたVimLコマンドを Q または : 読み出し専用)。
  • +* (システムクリップボードレジスタ。書き込んでクリップボードを設定したり、そこからクリップボードの内容を読み取ったりできます)

参照 :help registers を参照してください。

あなたは、どんなときでも :registers を使えば、すべてのレジスタの内容を表示することができます。このコマンドの同義語と短縮形は次のとおりです。 :display , :reg:di .

Insert またはコマンドラインモードで。 Ctrl - R にレジスタ名を加えた場合、そのレジスタの内容を挿入します。もし、文字どおりに挿入したいのであれば(自動インデントも、以下のような制御文字の変換もしない)、このレジスタの内容を挿入します。 0x08 をバックスペースにするなど) を使用することができます。 Ctrl - R , Ctrl - O レジスタ名。 参照 :help i_CTRL-R と以下の段落を参照してください。

しかし、以下のようなことも可能です(レジスターの使い方をたくさん忘れているかもしれません)。

  • 通常モードでは "です。 : p . vimで最後に使ったコマンドがバッファに貼り付けられます。
    分解してみよう " はNormalモードのコマンドで、次のyank、delete、paste操作の際に使用するレジスタを選択することができます。つまり " : はコロンレジスタを選択します(最後のコマンドを格納します)。次に p は既にご存知のコマンドで、レジスタの内容を貼り付けます。

    cf. :help " , :help quote_:

  • VimLファイルを編集しているとき(たとえば、あなたの .vimrc ) で、今すぐ数行の連続した行を実行したい。 y j : @ " 入力 .
    ここで y j は現在の行と次の行をデフォルトのレジスタ(無名レジスタとも呼ばれる)にヤンクします(これはjが行方向に動くからですが、これはこの回答の範囲外です)。次に :@ Exコマンドは、引数で与えられたレジスタに格納されているExコマンドを再生し " は、無名レジスタの参照方法です。また、関連するこの回答のトップもご覧ください。

    を混同しないでください。 " ここで使われている (レジスタ名である) " は、前の例のNormal-modeのコマンドです。

    cf. :help :@:help quote_quote

  • 最後の検索パターンを Insert モードでファイルに挿入するか、コマンドラインから 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 関数は,第1引数で名前を与えられたレジスタを(文字列として)設定し,第2引数の内容で初期化します(そして,レジスタを変数として使用するには,名前 @x ここで x はVimLでのレジスタ名)、第3引数で指定したモードにします。 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コマンドとして解釈し、Normalモードで再生しようとはしません。つまり、最後のコマンドが :e の場合、レジスターには e しかし @: はファイルを再読み込みし、語尾に移動しない。

    cf. :help @:

  • 実行する前にNormalモードで行うことを表示します。 @='dd' 入る . を打つと同時に = キーを押すと、Vim は式の評価に切り替わります:式を入力し 入力 Vim が計算し、その結果がレジスタの内容として機能します。もちろん,レジスタ = は読み取り専用で、一発勝負です。使い始めるたびに、新しい式を入力する必要があります。

    cf. :help quote_=

    補足 コマンドを編集しているときに、現在のバッファからある行をコマンドラインに挿入する必要があることに気がついたら エスケープ ! 使用 Ctrl - R =getline(58) 入る . この後、コマンドライン編集に戻りますが、58行目の内容が挿入されています。

  • 検索パターンを手動で定義する。 :let @/ = 'foo'

    cf. :help :let

    なお、この方法では / をパターン内で使用します。ただし、もちろんすべてのシングルクォートを二重にする必要があります。

  • で始まるすべての行をコピーします。 foo を含むすべての行を削除し、その後に bar をクリップボードにコピーするには、以下のコマンドを連鎖させます。 qaq (をリセットします。 a レジスタに空のマクロを格納します)。 :g/^foo/y A , :g/bar/y A , :let @+ = @a .

    大文字のレジスタ名を使用すると、レジスタがアペンドモードで動作するようになります。

    より良いのは、もし Q によってリマップされていない mswin.vim でExモードを開始します。 Q と入力すると、「コロンコマンド」と呼ばれるコマンドを連鎖的に実行し、通常モードに戻ることができます。 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 .

  • マクロを誤って記録してしまった場合、次のように入力します。 :let @a=' Ctrl - R =replace(@a,"'","''",'g') 入る ' と入力し、編集します。これにより、レジスターに格納されているマクロの内容が変更されます。 a そして、そのために式レジスタをどのように使用するかがここに示されています。

  • もし、あなたが dddd を行うかもしれません。 uu を実行すると、元に戻すことができます。とは p であれば、最後に削除された行を取得することができます。しかし、実はレジスターを使えば、9個までの削除を回復することもできます。 @1 を通して @9 .

    をすると、さらに良い。 "1P であれば . を通常モードで再生します。 "2P といった具合です。

    cf. :help .:help quote_number

  • 挿入モードで現在の日付を挿入したい場合。 Ctrl - R =strftime('%y%m%d') 入る .

    cf. :help strftime()

もう一度、混乱することがあります。

  • :@ は、レジスタの内容をvimscriptとして解釈し、ソースするコマンドラインコマンドです。
  • @ は,レジスタの内容を通常モードのキーストロークとして解釈する通常モードコマンドです(ただし : この場合、コロンと最後のリターンキーも再入力したかのように、コマンドが再生されます)。

  • " 通常モードでは、Yank、Paste、Delete、Correct などのレジスタを選択するのに役立つコマンドです。

  • " は有効なレジスタ名 (デフォルト、または名前のないレジスタ) でもあるため、レジスタ名を指定するコマンドの引数として渡すことができます。