複数の単語を(異なる行から)コピーして一度に貼り付ける


7

ファイルの別の行から別の文字列をコピーして、一度に貼り付けたい。つまり、違う単語をバスケットに集めて、一度に貼り付けたいです。これどうやってするの?

回答:


15

ヤンク(コピー)するときは大文字のレジスタを使用します。

"Ay

"Aレジスタの内容を置き換えるのではなく、レジスタに追加するように言いますa"aa

すべてをレジスターにコピーしたら、次のコマンドを使用して一度にすべてを貼り付けることができます。

"ap

レジスタの内容をクリアする方法は?
John

1
@John次のように、空のマクロを記録してレジスタをクリアできますqaq。または、以前の迷惑メールをそこに入れたくない場合は、小文字のレジスタを使用して最初の単語をコピーできます"ay。覚えておいてください、aそしてA、彼らは物事が追加されている方法に影響を与える、同じレジスタを参照してください。
8ビットツリー2017年

6

独自のカスタムオペレーターを定義して、モーションによってカバーされるテキストオブジェクトまたはテキストを段階的にヤンクすることもできます。

fu! Incremental_yank(type, ...) abort
    if a:type ==# 'char'
        norm! `[v`]y
    elseif a:type ==# 'line'
        norm! '[V']y
    elseif a:0
        norm! gvy
    endif

    call setreg('z', @".(a:type ==# 'char' ? ' ' : ''), 'a' . getregtype('"'))
    call setreg('"', @z, getregtype('z'))
endfu

nno <silent> zy  :<C-U>set opfunc=Incremental_yank<CR>g@
xno <silent> zy  :<C-U>call Incremental_yank(visualmode(), 1)<CR>
nno <silent> zyy :<C-U>set opfunc=Incremental_yank<Bar>exe 'norm! '.v:count1.'g@_'<CR>

nno <silent> zyc :<C-U>let [@", @z] = ['', '']<CR>p

この例では、4つのキー割り当てがインストールされています。

  • zy テキストオブジェクトまたはモーションを段階的にヤンクする通常の演算子
  • zyy 行で機能する同様の演算子
  • zy 視覚的な選択で機能する同様の演算子
  • zycレジスタを空にする通常のコマンド"およびz; テキストのシーケンスをヤンクする前に役立ちます

それを使用すると、次のことができます。

  • zyiw最初の単語にヒットするいくつかの単語をコピーしてから、次の単語にドットコマンドで操作を繰り返す
  • zyy最初の行にヒットするいくつかの行をコピーしてから、次の行にドットコマンドで操作を繰り返します
  • いくつかのビジュアルセレクションをコピーしzy、それぞれにヒットします

現在のコードはzレジスタを乱雑xにします。たとえば、別のレジスタを使用したい場合は、次の行を変更できます。

call setreg('z', @", 'a' . getregtype('"'))                call setreg('x', @", 'a' . getregtype('"'))
             ^                                                          ^
call setreg('"', @z, getregtype('z'))                 →    call setreg('"', @x, getregtype('x'))
                  ^              ^                                           ^              ^
nno <silent> zyc :<C-U>let [@", @z] = ['', '']<CR>p        nno <silent> zyc :<C-U>let [@", @x] = ['', '']<CR>p
                                 ^                                                          ^

詳細については、以下を参照してください。

:h g@
:h getregtype()
:h setreg()

ここに画像の説明を入力してください


そのプログラムは何ですか?
Segfault 2017

byzanz-recordおよびscreenkey
user9433424

これはすごい!これを変更して、複数のビジュアル選択でyank-appendにループを追加できますか?マークダウンファイルなしですべてのセクションをヤンクしたいとします。たとえば/^#\s.\+、私はそれを行うことができzyvます。
ルチアーノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.