305

2つのファイルを使用していますが、1つのファイルから数行をコピーして、別のファイルに貼り付ける必要があります。同じファイルにコピー(yy)と貼り付け(p)する方法を知っています。しかし、それは別のファイルでは機能しません。これはどのように行われますか?

また、カットアンドペーストする方法はありますか?グーグルを試しましたが、ほとんどのリソースはコピー&ペーストについてのみ説明しています。

4

19 に答える 19

257

テキストをカット/ヤンクする方法をすでに知っているので、テキストを別のファイルに貼り付けるためのいくつかのアイデアを次に示します。

  • 最初のファイルを編集して、必要なテキストをヤンクします。次に、vi(:e /path/to/other/file)内から2番目のファイルを開き、貼り付けます
  • 分割ウィンドウで両方のファイルを一緒に開き、Ctrl+ wUp/を使用してファイル間を移動しDownます。

    • vi -o /path/to/file1 /path/to/file2
    • 最初のファイル内から、Ctrl+ ws
于 2011-01-06T22:34:13.823 に答える
59

WindowsでVimを使用している場合は、次を使用してクリップボードにアクセスできます(MSコピー/貼り付け)。

"*dd-線をカットします(または3ddで3本の線をカットします)

"*yy--行をコピーします(または3行をコピーする場合は3yy)

"*p -カーソルの後の行に行を貼り付けます

"*P -カーソルの前の行に行を貼り付けます

別々のVimウィンドウ間またはVimとPCアプリケーション(メモ帳Microsoft Wordなど)間で貼り付けることができます。

于 2011-01-07T15:41:48.040 に答える
51

カットするdようなのバリエーションを使用してください。dd

ある範囲の行を別のファイルに書き込むには、次を使用できます。

:<n>,<m> w filename

ここ<n>で、および<m>は行の範囲を指定する数字(または記号)です。

デスクトップクリップボードを使用するには、+gコマンドを確認してください。

于 2011-01-06T22:35:46.507 に答える
32

他のファイルを開いて、と入力できます:r file_to_be_copied_from。または、バッファリングすることもできます。または、最初のファイルに移動し、コピーする行に移動して入力"qYし、貼り付けたいファイルに移動して入力します"qP

"buffer_name、バッファにコピーします。YヤンクでP置かれます。お役に立てば幸いです。

于 2011-01-06T22:36:16.200 に答える
30

これを行う1つの方法があります。

  • Vimを起動し、作業中のファイルであるfile1を開きます。
  • :efile2は、行をコピーするファイルであるfile2を表示します。
  • コピーする行を見つけます。3行の場合、ヒットします3yy
  • :b1これはバッファ1に切り替わります。ここでfile1は
  • ヤンクした行を挿入する場所を見つけて、p

両方のファイルを表示することもできます。Ctrlたとえば+で画面を分割しますw s

カットに関しては、dカットして、カットしたものをヤンクバッファーに入れます。dd線を「カット」します。

于 2011-01-06T22:37:57.020 に答える
18

これらはすべて素晴らしい提案ですが、別のファイル内のテキストの場所がわかっている場合は、sedを簡単に使用してください。:r! sed -n '1,10 p' < input_file.txtこれにより、すでに開いているファイルのカーソルの現在の位置に10行が挿入されます。

于 2012-03-10T06:46:56.443 に答える
11

2017-05アップデート:

次の行をvimrcファイルに追加すると、

クリップボードを設定=​​名前なし

次に、Vimはシステムクリップボードを使用しています。


異なるVimインスタンスウィンドウ間でコンテンツをコピーする方法では、ヤンクの方法が機能しないことがわかりました。(少なくとも、私のVimの知識に基づいては機能しません。それを機能させる別の方法があるかどうかはわかりません)。

私のテストによると、ヤンクの方法は、同じウィンドウで複数のファイルを開く方法でのみ機能します。

これを実行したい場合は、Ctrl+ xCtrl+ c(Windowsの場合)などのOSのカットコピーと過去の方法を使用することをお勧めします。

于 2011-08-09T23:29:50.267 に答える
7

ファイルを編集しているときに、開始と終了を使用する場所にマークを付けます

ma-aマークを設定します

mb-bマークを設定します

次に、それを別のファイルにコピーするには、次のwコマンドを使用します。

:'a,'bw /name/of/output/file.txt
于 2011-10-11T21:08:01.263 に答える
7

これらのリマップは私にとって魅力のように機能します。

vmap <C-c> "*y     " Yank current selection into system clipboard
nmap <C-c> "*Y     " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p     " Paste from system clipboard

したがって、ビジュアルモードになっているときに、必要な行を選択し、+を押してからCtrl+cを押して、受信者ファイルにテキストを挿入します。「*y」も使用できますが、覚えにくい場合もあると思います。Ctrlv

これは、Vimからクリップボードにテキストをコピーする場合にも役立ちます。

ソース:一時ファイルを使用してセッション間でコピーアンドペースト

于 2015-12-03T19:39:29.390 に答える
7
  1. クリップボードをサポートしてコンパイルされたVimバージョンがあることを確認してください
    • :echo has('clipboard')戻る必要があります1
    • 戻ってきた場合0(たとえば、Mac OS X、少なくともv10.11(El Capitan)、v10.9(Mavericks)、v10.8(Mountain Lion)-クリップボードをサポートしていないVimバージョンが付属しています)、クリップボードをサポートするVimバージョンbrew install vim(インストール後に端末を再起動することを忘れないでください)
  2. ビジュアルモードに入る(V-マルチライン、v-プレーン、またはCtrlv-ブロックビジュアル)
  3. コピーする行を選択します
  4. "*y-選択したものをコピーするには
  5. "*p-コピーして貼り付ける

PS:

  • 1行をコピーして貼り付ける必要がある場合は、手順2〜5をJayGによる回答の指示に置き換えることができます。
  • 行の選択を簡単にするために、に追加set mouse+=aすることができます.vimrc-余分な要素(行番号など)を選択せず​​に、マウスを使用してVimで行を選択できるようになります注意:マウスで選択したテキストをコピーする機能がブロックされますVimからシステムクリップボードに
于 2017-11-03T08:17:29.503 に答える
6

目標:あるファイルの一部を別のファイルに保存します。

解決策

  1. 保存するテキストを選択します。
    • 選択を開始する場所にカーソルを置きます
    • を押しvて文字を選択するか、大文字Vを押して行全体を選択します
    • 選択したいものの最後にカーソルを移動します
  2. 選択したテキストを新しいファイルに保存します。:wSpace新しいファイルのタイプと名前。実際に表示されます

    :'<,'>w new.txt

    次にを押しますEnter

于 2015-10-26T12:45:36.570 に答える
5

Vimの同じインスタンスで開かれている2つのバッファ(==ファイル)間でテキストをコピーしても問題ありません。

(前にビジュアルモードでコピー領域をマークしたと仮定して)を使用して一方のバッファをヤンクしy、を使用してもう一方のバッファに貼り付けpます。また、Vimの同じインスタンスにある限り、異なるタブでも機能します。

Vimの同じインスタンスで2つのファイルを開く方法は、システムによって異なります。

  • Win32では、コンテキストメニューに、2つ以上のファイルを選択した場合に1つのvimで編集するというオプションがあります。
  • あなたがコンソールにいるとき、あなたはそれを達成することができますvim file1 file2
  • 別のツールのエディターとしてVimを使用する場合は--remote-silent、すべてのファイルが同じインスタンスで開かれるようにするオプションを必ず指定してください

Vimの2つの異なるインスタンスで2つのファイルを開いた場合は、システムクリップボードを使用する必要があります。最初のVimインスタンスでは、を使用してテキストをシステムクリップボードにヤンクします"+y(ここでも、前にビジュアルモードでヤンクする領域をマークします) )、次に2番目のVimに移動し、クリップボードをそこに貼り付けます"+p

于 2011-01-06T22:42:57.427 に答える
3

私のシナリオでは、ファイル1からファイル2に、中央のn行、n不明の行をコピーする必要がありました。

:'a,'bw /name/of/output/file.txt
于 2012-06-06T21:59:02.713 に答える
1

例:fileAおよびfileB-25行目でfileAから開始し、50行をコピーして、fileBに貼り付けます。

fileA

Goto 25th line

25G

copy 50 lines into buffer v

"v50yy

Goto fileB

:e fileB

Goto line 10

10G    

paste contents of buffer v
"vp
于 2014-08-19T22:32:28.323 に答える
1

以下のオプションは、ほとんどの場合、また後で貼り付ける場合にも機能します。

 "xnyy
x - buffer name
n - number of line to Yank - optional

ヤンクされた行はバッファに保存され'x'ます。編集のどこでも使用できます。

他のファイルに行を貼り付けるには、

:e filename&location

例:現在の編集で以下のコマンドを入力します

:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor

完全な操作

ファイル1を開く:

vi Test1.sh

a10yy

-Yanked 10 lines

-現在の編集から2番目のファイルを開きます

*:e /u/test/Test2.sh*

-貼り付ける必要のある行にカーソルを移動します

*"ap*

-バッファからの行は'*a*'、現在のカーソル位置の後にコピーされます

于 2015-02-11T06:32:13.563 に答える
1

ファイルの一部をコピーして、そのコンテンツを別のファイルの途中に貼り付ける場合は、この方法で行うことができます。

:linenumber,linenumber write newfile

例:

:2,34 write temp1

または

:'mark, 'mark write newfile

例:

:'a,'b write temp1

これで、行が別のファイルにコピーされます。コピー後にそれらの行を削除したい場合は、

:linenumber1,linenumber2 d

または

:'mark1,'mark2 d

次に、他のファイルに移動します。次に、貼り付けたい行にカーソルを置きます。

タイプ

:r!cat temp1

これで、一時ファイルの内容がここに貼り付けられます。コンテンツを貼り付けた後、コマンドライン自体から一時ファイルを削除できます。

:!rm temp1

これは、コピーアンドペーストを数回行う場合に役立ちます。

于 2016-05-03T06:21:57.987 に答える
0

もう1つの方法は、2つの分割バッファーで2つのファイルを開き、目的の行を視覚的に選択した後、次の「スニペット」を使用することです。

:vnoremap <F4> :y<CR><C-W>Wr<Esc>p
于 2016-05-04T12:35:13.350 に答える
0

コマンドモードに入り、実行します

:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from

たとえば、現在開いているファイルに行20-30を抽出しますfilename

:r! sed -n '20, 30p' filename
于 2018-04-18T21:10:42.657 に答える
0

あなたの:を設定viminfoします.vimrc

set viminfo=%,<1000,'10,/50,:100,h,f0,n~/.viminfo

~/.viminfoこれにより、 Vimを終了したときに、ファイル内に最大1,000行のヤンクされたもの(「レジスタ」)が保持されます。Vimを起動すると復元されるので、別のファイルに貼り付けることができます。

セッション間で持続する可能性のある他のすべてのものについては、viminfoドキュメントを参照してください。

于 2021-11-19T10:06:08.867 に答える