すべての行をクリップボードにコピー


564

VIエディターで開いているファイルからクリップボードにすべての行をコピーする方法はありますか?私は試しましたyGが、それらの行を保存するためにクリップボードを使用していません。

それは可能ですか?



1
Windowsを使用していてヤンクが機能しない場合は、上から17番目の回答を参照してください
。stackoverflow.com

回答:


636

あなたは、テキストにヤンクすべき*+ のレジスタを

gg"*yG

説明:

  • gg カーソルをファイルの最初の文字に移動する
  • "*y*最初の行からレジスターへのヤンクコマンドを開始するには...
  • G ファイルの終わりに行く

6
キーのように見えるようにテキストをどのようにマークアップしますか?私はそれをSOでまだ見ていません。
jergason

10
こんにちは...機能していませんか?クリップボードデータは変更されません。..私はGGカーソルを入力すると、最初の行に行く...しかし、私は、「入力したとき* YG ..cpuビープ音..soは、それが正常か、私のvimといくつかの問題である*で、私はUbuntuの上だ?
Xinus

1
デッドキーを有効にしていますか?(たとえば、「a」を押すとáが表示されます)その場合は、後にスペースを押す必要があります"
Tordek、2009年

144
xim_clipboardを有効にしてコンパイルした場合、Vimはシステムクリップボードにのみアクセスできます。この機能があるかどうかを確認するには:version、vimで実行し、+xterm_clipboardフラグを探します。マイナス記号が前に付いている場合、この機能はありません。その場合は、vimを自分でコンパイルするか、通常はこの機能が有効になっているgvimを実行してください。
nelstrom、2009年

9
このアプローチの問題は、カーソルを移動してウィンドウをスクロールすることです。二回。他の答えははるかに少ないキーストロークがある欠点を:)
sehe

696

使用する:

:%y+

すべての行をヤンクします。

説明:

  • % すべての行で機能する次のコマンドを参照する
  • y それらの行をヤンクする
  • + システムのクリップボードにコピーする

NB:ではWindowsの、+*同等ですがこの回答を参照してください


19
さらに、カーソルの位置は変更されません。
nperson325681

1
@guangnan:これらのレジスタはviには存在しません。vimでのみ。入力:helpしてみて、実際にvimにいることを確認してください。
目立つコンパイラ

6
私はする必要がset clipboard=unnamedありましたが、これはうまくいきました!
cdunn2001

235
Vim E850: Invalid register name
さんのコメント

23
このソリューションは、vimがクリップボードオプションでコンパイルされた場合にのみ機能します(vim --versionはその場合+ clipboardを表示します)。そうでない場合、ブライアンのソリューション(:%w!pbcopy)はMac向けのソリューションです。他のオペレーティングシステム(xclipなど)で代替を利用できます。
yaccob 2016年

90

Mac

  • 選択した部分をコピー:テキストを視覚的に選択し(タイプvまたはV通常モード)、タイプ:w !pbcopy

  • ファイル全体をコピーする :%w !pbcopy

  • クリップボードから過去 :r !pbpaste


6
スムーズに動作します。コマンドの説明は本当にいいでしょう。
Vlad Manuel Mureșan 2016年

5
@Geo pbcopyはMacユーティリティです。Linuxでは、xsel代わりに、またはclipWindows では動作する可能性があります。
デビッドロード

1
ファイルが端末の高さより長い場合、これは機能しません。
Sridhar Sarnobat 2018

1
@SridharSarnobat :%w !pbcopyは、ファイルがターミナルの高さよりも長い場合でも機能します。
エイドリアンシュミット

申し訳ありませんが、クライアントがMacでサーバーがLinuxであるsshを意味していました(これはOPが探していたものと想定していましたが、今考えたところ、これは無関係な問題です)。私の弁護では、ローカルファイルのコピーと貼り付けのvimは避けますが、それは私の個人的な好みです。良いヒント。
Sridhar Sarnobat

56

クリップボードはバッファ+です。クリップボードにコピーするには"+y、[移動]を実行します。

したがって、gg"+yGファイル全体をコピーします。

同様に、クリップボードから貼り付けるには、 "+p


4
これに追加するだけで(4年後...)、カーソル位置がファイルの先頭にジャンプするというわずかな欠点があります。これを回避するには(たとえば、これをvimrcのショートカットにマッピングしている場合)、次のようにします。mqgg "+ yG`q
Tom Lord

45

VIの使用に問題がある場合にファイル全体をコピーするもう1つの簡単な方法は、「c​​at filename」と入力することです。ファイルを画面にエコーし、上下にスクロールしてコピー/貼り付けできます。


1
E603::tryなしで:catch
ポールクリスジョーンズ

2
そして、vimを終了せずにそれを実行したい場合は、次のコマンドを実行できます:!cat %。また、ファイルの内容をプログラムでMac OSのクリップボードにコピーするには::!cat % | pbcopy
TanguyP

ブラウザウィンドウで開かれたWindowsのUbuntu VMからGCPのDebianにファイルをコピーする必要がありました...:/ vim yankingのバリエーションは機能しませんでした。これはWindowsに貼り付け、ファイルをGCPにアップロードするために機能しました。
frmbelz

31

これは私がファイル全体をヤンクするために行うことです:

ggVGy

12
クリップボードではなくデフォルトのレジスターにヤンクしているので、これは質問の答えにはなりません。
目立つコンパイラ、

2
@ConspicuousCompilerがclipboard、ヤンクされたテキストをコピーするためのセットを持っているとしたらどうでしょう+
TankorSmash

@TankorSmashは最速(:%y)でもneatest(少なくともggyGの方が良い)メソッドでもありません。
ペドロアペロ2016

@ConspicuousCompiler デフォルトのレジスタクリップボードの違いは何ですか?
nilon

16

「cat」コマンドを使用してファイルを開き、マウスを使用してコピーできます


5
しかし、それは "vi"の方法にはなりません。ファイルが巨大な場合、それも問題になります...これは機能するかもしれませんが、推奨される方法ではありません...
Aditya

1
reset端末を事前に、すべてを選択してコピーします。これはsshセッションを通じて機能します。
arcol

xterm_clipboardが利用できない場合、異なるリモートサーバーにある大きなファイル(1万行未満)の最速の方法
Matias Haeussler

10

(@rshdevへの返信、およびOPのコメントで@nelstromごとに+ xterm_clipboardを使用してvimを再コンパイルする必要を回避するため)

Ubuntu 11のputclipのように機能するxclipというプログラムがあります。

:%!xclip -sel clip
u

デフォルトではインストールされません。インストールするには、次を使用します:

sudo apt-get install xclip

10

Ubuntu 12の場合

あなたはvim-gnomeパッケージをインストールしようとするかもしれません:

sudo apt-get install vim-gnome

クリップボード機能を使用するために必要なvim --versionフラグxterm_clipboard-で示される)が無効になると言われたため、試してみました。

-> Ubuntu 12にvim-gnomeパッケージをインストールすると、コンソールベースのバージョンのvimもインストールされ、このオプションが有効になります(xterm_clipboardフラグの前の+で示されます)。

Arch Linuxの場合

vim-clipboard同じ理由でインストールできます。

neovimを実行している場合は、インストールする必要がありますxclip(で説明されていますhelp clipboard-tool)。


1
unix.stackexchange.com/questions/25965/… 誰かが知っている他のオプションはありますか?
Sandip Pingle 2014

6

Vimをビジュアルモードで使用している場合、少なくともWindowsでは、標準のカットアンドペーストキーも適用されます。

  • CTRLA 「ファイル全体をマークします。
  • CTRLC 「選択範囲をコピーします。
  • ESC 「選択を解除するので、次のキーを押してもファイル全体が置き換えられません:-)

Ubuntuターミナル(Gnome)では、少なくとも標準のコピーも機能します(CTRLSHIFTCただし、の標準的なキーボードショートカットがないようですselect all(がALTE後に続く場合を除くA)。


6
ただし、mswin.vimを使用していない場合、ctrl-aは現在の行の次の数値を増分します。
Mark Rushakoff、2009年

@Mark、この動作は標準のVimインストールからのものなので、これがデフォルトであると思います。環境が異なるように構成されている場合、すべての賭けは無効になりますが、その場合、OPは何をしているのかをOPが知っていると思います:-)どちらの場合も、OPはコメントで彼らがUbuntuにいたため私の答えはおそらく当てはまりません。Gnomeのターミナルに関するものです。
paxdiablo 2009年

5

ggを押してカーソルをファイルの先頭に配置し、yGを押してすべてのコンテンツを先頭から末尾(Gに配置)にバッファーにコピーします。幸運を祈ります!


4

私は人々が上で述べたいくつかのコマンドを試しました。どれもうまくいきませんでした。それから私はそれらの最も単純なものを手に入れました。

ステップ1:vi <filename>
ステップ2:Puttyウィンドウのタイトルバーを右クリックします。
ステップ3:[Clear scrollback
]を選択します(残りのSSHセッションがコピーされないようにするため)ステップ4:もう一度右クリックして[すべてをクリップボードにコピー]を選択します。


1
15000行のファイルの場合、これはすべてを取得しませんでした。パテWindow > Settings > lines of scrollbackを40000 に増やす必要がありました(タイトルバーを右クリックしても表示されます)。catすべてのテキストをスクロールするので、viの代わりに使用すると役立ちます。
Noumenon 2016年

1
このようにして、ファイルの上部と下部から常に行が失われることになりました。私が今やっていることは猫です、そしてファイルの最初と最後を中クリックして選択範囲を広げます。
Noumenon 2016年

これを試したところ、画面には111行しか表示されません
でした

3

:%y aすべてのコンテンツをvimのバッファーにヤンクします。pコマンドモードで押すと、カーソルが現在立っている行の後にヤンクしたコンテンツが貼り付けられます。


3

gVim:

:set go=a

ggVG

を参照してください:help go-a

'a' Autoselect:  If present, then whenever VISUAL mode is started,
 or the Visual area extended, Vim tries to become the owner of
 the windowing system's global selection.  This means that the
 Visually highlighted text is available for pasting into other
 applications as well as into Vim itself.  When the Visual mode
 ends, possibly due to an operation on the text, or when an
 application wants to paste the selection, the highlighted text
 is automatically yanked into the "* selection register.
 Thus the selection is still available for pasting into other
 applications after the VISUAL mode has ended.
     If not present, then Vim won't become the owner of the
 windowing system's global selection unless explicitly told to
 by a yank or delete operation for the "* register.
 The same applies to the modeless selection.

3

まあ、これらのアプローチはすべて興味深いですが、怠惰なプログラマーとして、私は番号+の組み合わせを使用してすべての行をヤンクします y

たとえば、合計78行のソースコードファイルがある場合、次のように実行できます。

  1. gg 最初の行にカーソルを置く
  2. 挿入78 + y ->カーソルの下の78行と現在の行をヤンクします

2

Bill Joyのviには「クリップボード」の概念がなかったので、組み込みの方法はないと思います。

gVimのクリップボードへの自動コピー、何でもハイライト表示される機能は、最も簡単です。

Cygwinのvimには、

:%!putclip
u

たぶんUbuntuにはputclipのようなCLIアプリがありますか?


素晴らしい提案、ありがとう!xclipと呼ばれるそのようなプログラムがあります。詳細については、別の回答を投稿しました(余分な改行やコードのフォーマットなしでは、コメントから読むのはあまりにも混乱していました)。
シチュー

2

指のデフォルトがの場合は、CTRL-A CTRL-Cからのマッピングを試してください$VIMRUNTIME/mswin.vim

" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y

" CTRL-A is Select all
noremap <C-A> gggH<C-O>G
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-A> <C-C>gggH<C-O>G
onoremap <C-A> <C-C>gggH<C-O>G
snoremap <C-A> <C-C>gggH<C-O>G
xnoremap <C-A> <C-C>ggVG

とにマッピングされ<Leader><C-a>てい<Leader><C-c>ます。


2

vimまたはそのタブ内のファイル全体をコピーします

y G 

次にタブに移動して貼り付けます

p

そして、ファイル全体の使用をカットする

d G

2

.vimrcに次の行を追加しました

nnoremap <F5> :%y+<CR>

これにより、VimのすべてのテキストをF5(コマンドモードで)を押してクリップボードにコピーできます。


1

CTRL+ を使用してすべてをクリップボードに選択するマップコマンドを次に示しますa

"
" select all with control-a
"
nnoremap <C-a> ggmqvG"+y'q

それを.vimrcに追加すれば、準備完了です...


1

これについては10年で解決するはずですが、最初の2つの答えはうまくいかなかったので、掘り続けました。Redhat(リモートサーバー)-Windows 10(ローカルマシン)では、マウスですべてを選択できない場合、リモートマシンとローカルマシンのクリップボード間で通常のコピーが機能しないため、行き詰まります。

したがって、リモートLinuxにコピーしてローカルWindowsに貼り付けるには、プライマリバッファーをで指定して、*ダブルヤンクを実行します

を使用しgg" * yyます。


0

このアクションを実行する関数を作成しました~/.vimrc。それをに配置します。

fun! CopyBufferToClipboard()
    %y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()

OBS:neovimを使用している場合は、xclipなどのクリップボードマネージャーも必要です。neovimの詳細情報タイプ:h checkhealth

yすべてのコピーフィード+を "クリップボードレジスタ"に設定するために、常に単純なものがクリップボードにコピーされるとは限らないことを言及することも重要です:set clipboard=unnamed,unnamedplus。詳細については、を参照してください:h unnamed

ここでvim wikiaの詳細をご覧ください。


0

次のようなshortcurを使用できます。

noremap <F6> :%y+<CR>

つまり、ノーマルモードでF6を押すと、ファイル全体がコピーされ、クリップボードに追加されます。または、通常モード:%y+で入力してを押すこともできますEnter


-1

マウスの左ボタンをクリックし、コピーして解放するセクションをドラッグします。コードは自動的にクリップボードにコピーされます。


3
ファイルは非常に大きくなる可能性があり、テキスト全体をマウスでドラッグしても生産的ではありません(vi方法も)。
Beco博士、2014

1
実際、これは良い答えであり、私にとってはうまくいきます。私のシステムでは、環境は限定的です。出力を画面に表示し、マウスを使用してドラッグ、選択、リリースします。次に、Windows Notepad ++にコピーします。他には何も機能しません。
Apurva Singh 2016

-1

上記の回答を使用してファイルをコピーできませんでしたが、パテがあり、Quoraで回避策を見つけました。

  1. PuTTYセッションの設定を変更し、ロギングに移動して、「印刷可能な文字」に変更します。ログファイルを設定する
  2. それぞれのファイルの猫をしてください
  3. 手順1で設定したファイルに移動すると、ログファイルにコンテンツが含まれます。

注:セッションのすべての出力文字がログファイルにコピーされるため、最終的には大きくなります。その場合は、ログファイルを削除し、ターゲットファイルをcatして、特定のファイルのコンテンツをマシンにコピーします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.