web-dev-qa-db-ja.com

あるファイルから別のファイルにviでコンテンツをコピーして貼り付ける

私は2つのファイルで作業しています、私は1つのファイルから数行をコピーして別のファイルに貼り付ける必要があります。同じファイルに(yy)と(p)をコピーする方法を知っています。しかし、それは異なるファイルに対してはうまくいきません。

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

226
macha

テキストを切り取る方法はすでにわかっているので、ここに別のファイルに貼り付けるためのいくつかのアイデアを示します。

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

    • vi -o /path/to/file1 /path/to/file2
    • 最初のファイル内から Ctrl + w、 s
192
Adam Batkin

WindowsでVIMを使用している場合は、次のコマンドを使用してクリップボードにアクセスできます(MSコピー/ペースト)。

"*dd - 線を切る(または3行に切るには3dd)

"*yy - 1行コピーする(3行コピーする場合は3yy)

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

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

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

46
JayG

カットするにはdのようなddのバリエーションを使います。

ある範囲の行を別のファイルに書き込むには、次のようにします。

:<n>,<m> w filename

<n><m>は、行の範囲を示す数字(または記号)です。

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

36
Apalala

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

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

両方のファイルを表示可能にすることもできます。画面を次のように分割します。 CTRL + ws

切断は、 d カットしたものをヤンクバッファに入れる。 dd 行を「カット」します。

25
nos

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

"buffer_name、バッファにコピーします。 Yはヤンク、Pはputです。それが役立つことを願っています!

22
Win Man

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

14
malik

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

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

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

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

:'a,'bw /name/of/output/file.txt
7
vman

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

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を押してからCtrl + Vを押して、受信側ファイルにテキストを挿入します。あなたは "* yを使うこともできますが、これを覚えるのは難しいと思います。

これはテキストをvimからクリップボードにコピーするのにも便利です。

出典: http://vim.wikia.com/wiki/Copy_and_paste_between_sessions_using_a_temporary_file

5
rovitulli

201705アップデート:

次の行をあなたのvimrcファイルに追加すれば、

set clipboard =無名

それからVIMはシステムクリップボードを使用しています


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

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

それをしたい場合は、ctrl + x、ctrl + c(Windowsの場合)のようなOSのカット - コピー - 過去の方法を使用したほうがよいでしょう。

5
Lichader

ここでは簡単な答えを見つけていないので、自分で投稿します。

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

解決策

  1. 保存したいテキストを選択してください:
    • 選択を開始する位置にカーソルを置きます
    • 押す v OR大文字を選択する V 行全体を選択する
    • 選択したいものの末尾にカーソルを移動します
  2. 選択したテキストを新しいファイルに保存します。タイプ :wSpace そして新しいファイルの名前。実際に見るでしょう

    :'<,'>w new.txt

    その後を押します Enter

4
Lu55

VIMの同じインスタンスで開かれている2つのバッファ(==ファイル)間でテキストをコピーしても問題ありません。 y (あなたが以前にビジュアルモードでコピーする領域をマークしたと仮定して)それからもう一方のバッファに貼り付けます。 p。同じVIMのインスタンスにある限り、異なるタブでも機能します。

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

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

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

4
eckes

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

:'a,'bw /name/of/output/file.txt
3
Shyam S

例:fileAとfileB - ファイルの25行目から開始し、50行をコピーしてfileNに貼り付ける

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
1
Brenda

コマンドモードを入力して実行

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

filenameから20-30行を現在開いているファイルに抽出するE.g

:r! sed -n '20, 30p' filename
0
Anthony Awuley

ファイルの一部をコピーしてその内容を別のファイルの途中に貼り付ける場合は、この方法を使用できます。

: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

これを何度もコピー&ペーストしたい場合に役立ちます。

0
SibiCoder

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

:vnoremap <F4> :y<CR><C-W>Wr<Esc>p
0
Thorsten

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

 "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*'からの行は現在のカーソル位置の後にコピーされます

0
Raams
  1. Vimのバージョンがクリップボードサポート付きでコンパイルされていることを確認してください
    • :echo has('clipboard')1を返すべきです
    • もしそれが0を返すなら(例えばOSX、少なくともEl Capitan、Mavericks、そしてMountain Lion - クリップボードをサポートしていないVimバージョンが付属しています)、brew install vim経由でVimバージョンをインストールする必要があります。インストール後の端末)
  2. ビジュアルモードに入ります(V - マルチライン v - 普通、または Ctrlv - ブロックビジュアル)
  3. コピーしたい行を選択
  4. "*y - 選択したものをコピーする
  5. "*p - コピーして貼り付ける

P:

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