テキストのブロックをシステムクリップボードにコピーして、別のプログラムに貼り付ける方法はありますか?
コメント
回答
X11 ベースのシステム(例: Linux およびその他のほとんどの UNIX のようなシステム)互いに独立した2つのクリップボードがあります:
- PRIMARY -これはコピーオンセレクトであり、マウスの中ボタンで貼り付けることができます。
- CLIPBOARD-これは(通常)
^C
でコピーされ、貼り付けられます。^V
(MS Windowsのようなもの)を使用します。
OS X および Windows システムにはクリップボードが1つしかありません。
X11の場合システムには、これらのクリップボードを同期するツールも多数あります。したがって、それらが同じように見える場合は、そのうちの1つを実行している可能性があります。
Vimには2つの特別なレジがあります。これらのクリップボードに対応するター:
-
*
はPRIMARYを使用します。ニーモニック: S tarは S エレクト(コピーオン s エレクト) -
+
はCLIPBOARDを使用します。ニーモニック:CTRL PLUS C(共通キーバインド用)
Windows & OS X +
と*
の間に違いはありません。これらのシステムには、単一のシステムしかないためです。クリップボードであり、両方のレジスタが同じものを参照します(どちらを使用してもかまいません)。
これらのレジスタは任意のレジスタとして使用できます。たとえば、PRIMARYクリップボードを使用します*
とy
およびp
コマンド:
-
"*yy
-
"*p
これをより便利なキーバインドとして使用できます:
noremap <Leader>y "*y noremap <Leader>p "*p noremap <Leader>Y "+y noremap <Leader>P "+p
“自動的に”システムとインターフェースする場合クリップボードを常に手動で参照する代わりに、clipboard
変数を設定できます。
-
unnamed
に設定して、*
を使用します(プライマリ、選択時) -
を使用して+
(CLIPBOARD、^C
)
これで、yy
を使用するだけで、Vimの名前のないレジスタではなく、システムのクリップボードに移動し、p
がシステムを貼り付けます。 “sクリップボード。
let
のレジスタと同じように、これらのレジスタに割り当てることもできます。
-
:let @+=42
-
:let @*=42
clipboard
設定にはさらにいくつかのオプションがあります(フィルターの除外など)。しかし、これらは基本です。詳細については、:help "clipboard"
を参照してください;-)
gVim
gVimを使用すると、次の場合にコピーオンセレクト動作を実行できます。 :set guioptions+=a
を使用します。
これはX11システムではデフォルトで有効になっています(PRIMARYにコピー)が、MSWindowsでは ありません& OSX(テキストを選択するとクリップボードが上書きされるため)
いいえ+clipboard
?
Vimには+clipboard
これが機能するための機能フラグ。 Vim内から:echo has("clipboard")
を使用して、Vimにこれがあるかどうかを確認できます(出力が0
の場合、ではありません存在する場合は、1
の場合)、またはvim --version
の出力で。
ほとんどのLinuxディストリビューションには、デフォルトで”最小限の” Vimビルドが付属していますが、
ですが、通常はインストールできます:
- Debian & Ubuntu:。
- Debian:
vim-X11
をインストールし、iv id =の代わりにvimx
を実行します。 “acad7a8b55”> (詳細)。 - Arch Linux:
gvim
(これにより、通常のvim
でも+clipboard
が有効になります。
xclip
、xcopy
、またはxsel
を使用して、テキストをクリップボードにコピーします。以下を参照してください。解決策に関する質問:
SSH
SSHを介したX11転送を有効にすると、リモートマシンでクリップボードを使用することもできます。これは、xclip
を使用してデスクトップのクリップボードにアクセスできるため、上記のヒントで特に役立ちます。「ssh-ing」するマシンのVimには引き続き+clipboard
機能。
これにはForwardX11Trusted
設定が必要であり、信頼できるサーバーでのみ実行してくださいこれにより、サーバーがX11セッションをほぼ完全に制御できるようになります:
$ ssh -XY myhost
これらの設定を永続的にするには(つまり、毎回-XY
を追加する必要はありません)、~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over # your X11 session. Host myhost ForwardX11 yes ForwardX11Trusted yes
Neovim
Neovimはクリップボードのサポートを刷新しました。組み込みのインターフェイスが削除され、を呼び出すシステムに置き換えられました。 xclip
、xsel
、pbcopy
/ 。
自動化する必要がありますこれらのユーティリティを手に取って使用してください。 OSXではpbcopy
とpbpaste
がデフォルトで使用可能になっているはずですが、Linuxではおそらくxclip
、これが最も広く利用可能です(互換性のないフラグを持つxsel
の 2つのバージョンが実際にあります。これ本当にばかげています。
Neovimの :help clipboard
も参照してください。
コメント
- ssh -Yは-Xを意味するため、-Xは省略できます。
- これを学ぶことの非常に興味深い副作用(数年)以前)私にとって、
"
は多くの名前付きレジスタを選択できることに気づきました。"+
は魔法ではなく、’は+
を登録するだけです。たとえば、3つを同時にコピーして、それぞれを1つずつ貼り付ける場合は、"1y
、"2y
および"3y
およびl ater"1p
、"2p
、および"3p
。これは本当に強力で、他のほとんどのエディターには存在しません。もう1つの興味深い使用法は、格納されているマクロを調べることです。たとえば、qq
で録音したが、修正する必要があることに気付いた場合は、次のことができます。一時行"qp
で、修正するそれと、"qd
。 - 注意:OSXには2つの別々のクリップボードがあります。 1つはCmd-CとCmd-Vを使用してアクセスし、もう1つはemacsキーバインドCtrl-KとCtrl-Yを使用してアクセスします。
- @ shahbaz-おそらく、このような目的には文字レジスタを使用する方がよいでしょう。番号は、テキストが削除されるたびに変更されます。
- 質問で説明されているように、&をコピーして貼り付けます。これはデスクトップ向けです。パッケージ
gvim
をvim
と一緒にインストールすると、クリップボード機能が提供されるのは事実です。しかし、ファイルブラウザでは、ファイルを開くための2つのテキストエディタが提供されます。そして、これは醜いように見えます。これが、パッケージvim
とvim-gui-common
のみをインストールする方がよい理由です。後で、gvim
をインストールせずにクリップボード機能を提供します。これはLinuxDebian10上にあります。
回答
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
これにより、デフォルトのVimレジスタがレジスタ。システムクリップボードにリンクされています。 :h clipboard-unnamedplus
から:
clipboard-unnamedplus unnamedplus A variant of the "unnamed" flag which uses the clipboard register "+" (quoteplus) instead of register "*" for all yank, delete, change and put operations which would normally go to the unnamed register. When "unnamed" is also included to the option, yank operations (but not delete, change or put) will additionally copy the text into register "*". Only available with the +X11 feature. Availability can be checked with: if has("unnamedplus")
コメント
- vimインスタンス間(それぞれ個別のターミネーターターミナル)でヤンク&貼り付けたときに、これが機能しないのはなぜですか?
- Linuxを使用していて、Vimが+ X11機能でコンパイルされていて、clipboard = unnamedplusが設定されている場合、vimの1つのインスタンスで行をヤンクし、別のインスタンスに貼り付けることができるはずです。 vimの。 CTRL + VまたはSHIFT + INSERTを使用して他のアプリケーションに貼り付けることもできるはずです。 Vim内で
:version
を使用して、含まれている機能のリストに+ X11が表示されるかどうかを確認できます。 ‘ unnamedplus ‘機能が:if has('unnamedplus')⏎ echo 'yes'⏎ endif
で利用できるかどうかを確認することもできます。 Linuxではない場合は、unnamedplusではなくunnamedを使用する必要があります。
回答
他の回答では、コピー方法について説明しています。バッファからシステムクリップボードへのテキスト。別の一般的な操作は、別のレジスタからクリップボードにテキストをコピーすることです。たとえば、すでにテキストを"
(デフォルトのレジスタ)にヤンクしている場合は、そのレジスタをクリップボードにロードすることをお勧めします。
:let
でこれを行います:
-
let @+=@"
—デフォルトのレジスタをクリップボードにコピーします -
let @*=@"
—デフォルトのレジスタをX11プライマリ選択( “mouseクリップボード “) -
let @+=@a
—レジスタa
からコピークリップボード - など
これは一般的にレジスタで機能することに注意してください:let @a=@b
はレジスタを登録するにはa
。
回答
オンこれをサポートするビルドでは、*
という名前のレジスタがシステムクリップボードです。Vimからシステムクリップボードにテキストをコピーするには、次のことができます。ビジュアルモードを使用してテキストを選択し、 " * y を押してシステムクリップボードにコピーします。
逆に、 " * p を使用して、システムクリップボードからVimにテキストを貼り付けます。
回答
+clipboard
を機能させる方法がわからない場合は、何らかの理由でできませんでした。これ。
ファイルのセクションのみをコピーしたい場合は、shift
+ v
を実行します。ビジュアルモードにし、コピーしたい行だけを強調表示します。次に、これを行います。
# Linux Wayland :"<,">w !wl-copy # Linux Xorg :"<,">w !xclip -selection clipboard
説明
-
"<,">
-つまり、ビジュアルモードを使用して範囲を選択しました(これは入力しません) -
w !{cmd}
-範囲をcmd
、詳細については、:help w_c
-
wl-copy
およびxclip
は、テキストをパイプ処理できるプログラムであり、「システムクリップボードに追加されます
また、これが履歴に含まれると、すべてを入力する必要はありません。もう一度。ビジュアルモードで選択し、w
と入力してから上に押すと、コマンドがオートコンプリートされます。また、ビジュアルモードを使用する必要はありません。必要な範囲を設定できます。
コメント
- これは説明を提供するため、これを(他の同様の回答よりも)賛成します。ちなみに、私自身または他の読者への注意:
xclip
を使用する場合、その-selection clipboard
パラメータを追加する必要はありません。入力するにはあまりにも長すぎます。デフォルトの:'<,'>w !xclip
は、コンテンツを” primary “、つまりcopy-on-にコピーします。マウスの中ボタンで貼り付けることができるクリップボードを選択します。
回答
Gvimを使用することをお勧めします。これを.vimrc
に追加します:
source $VIMRUNTIME/mswin.vim behave mswin
これにより、 Ctrl C 、 Ctrl X 、 Ctrl V はWindowsのメモ帳のようです。
これにより、:w
、の Ctrl S などの他の一般的なWindowsショートカットも追加されることに注意してください。 Ctrl A ですべてを選択など
回答
苦労していましたシステムクリップボードとvim
内のtmux
。
xsel
またはxclip
、この例のように:
1。)visu通常モードでブロックテキストを選択します:V<motionkey>
2.a)with xsel
run ex::"<,">w !xsel -b
2。b)xclip
を使用してex::"<,">w !xclip -selection clipboard
3を実行します。)別のプログラムに貼り付けます
…そして今度はこれを優先的にnmapします。
これらのオプション(-bまたは-selectionクリップボード)は基本的に、プログラム(xselまたはxclip)がバックグラウンドに送信され、別のプログラムがコンテンツを貼り付けて、「干渉」できるようにします。
(i3、xfce4-terminal、tmuxを使用するmanjaroの場合)
回答
これは動作ですシステムクリップボードに関しては、次のようにしたかったのです。
- 改行が機能する行をヤンクする
- 改行が機能しない行をヤンクする
- 視覚的に何でもヤンクする選択した作品
- 作品をカット
- 改行作品で線を切る
- 改行なしで線を切る
作品でつまり、「vimにいる間もp
を使用して貼り付けることができ、システムクリップボードも使用できます。基本的に、コピーアンドペーストを期待どおりに機能させたいのですが、しませんでした。」システムクリップボードを必要以上に乱雑にしたい。
私のテクニックは、:
" use system clipboard " https://anuragpeshne.github.io/essays/vim/7.html noremap y "*y noremap yy "*yy noremap Y "*y$ noremap x "*x noremap dd "*dd noremap D "*D
https://anuragpeshne.github.io/essays/vim/7.html ブログ投稿は次のとおりです。
再帰的マッピングは悪です。常に非再帰的マッピングを使用してください。 (noremap)
コメント
-
"
しますか?最初の回答では、*
の目的はすでに説明されていますが(プライマリクリップボードを参照)、’の説明はどこにも見当たりません。"
の目的と、それがコマンドを機能させる理由。 - ‘は、’がすぐにはわかりません。’
"foo"
のように、単語を一周するために使用される引用符におそらく慣れています。ただし、vimの場合、"*
は実際には”レジスタ”(vimコンセプト)システムクリップボードに接続します。 vimを開いて:registers
と入力すると、""
、"0
、"1
など。この記事はレジスターについて学ぶのに役立ちました: brianstorti.com/vim-registers
回答
vimが+clipboard
をサポートしていない場合は、 fakeclip Linux、Mac、Windows、tmux、screenなどのプラグイン…
回答
他のすべての回答がカバーされていますレジスターに関するすべての重要なこと。私が使用しているものをもう1つ追加したいと思います。
Vimには視覚的に選択されたを直接コピーする方法がありますクリップボードにテキストを入力します。これを vimrc ファイルに入れるだけです:
set guioptions+=a
そして、これを使用すると、テキストを視覚的に選択するたびに、クリップボード。詳細については、:help guioptions
BTW、これはgVim専用です。
コメント
-
guioptions+=a
はCarpetsmoker ‘の回答にも記載されています。 - @muruうん、ごめんなさい。 。 ‘以前は見たことがありませんでした。見たばかりです。
回答
グローバルコマンドを使用して、特定のパターンをクリップボード。これは、ファイルに情報が散在していて、手動で対処するとエラーや疲れが発生しやすい状況で役立ちます。
最初に情報を受け取るレジスタをクリーンアップします
:let @a=""
次に、パターンを含むすべての行をコピーします
:g/pattern/yank A
最後に情報をシステムクリップボードに転送(コピー)します
:let @+=@a
「パターン」を含むすべての行をクリップボードに直接コピーしようとすると、クリップボードに新規追加機能がないため、機能しません。したがって、ここでは通常のvimレジスタを使用して、パターンを含むすべての行を一度に格納し、クリップボードに配置します。
OBS:レジスタを使用する前に、レジスタをクライニングする必要があります。レジスタの大文字バージョンを使用すると、コンテンツを追加できます。そうしないと、コンテンツを追加できません。
回答
MacVimを使用する場合、通常のCmd+x/c/v
は $ VIMRUNTIME / macmap。vim はデフォルトで提供されているため、設定なしで利用できます:
vnoremap <special> <D-x> "+x vnoremap <special> <D-c> "+y cnoremap <special> <D-c> <C-Y> nnoremap <special> <D-v> "+gP cnoremap <special> <D-v> <C-R>+ execute "vnoremap <script> <special> <D-v>" paste#paste_cmd["v"] execute "inoremap <script> <special> <D-v>" paste#paste_cmd["i"]
ただし、これらを使用すると、vimユーザーが vimの方法で、外国のコンピューター/環境で失われます。
cpip
、cpi{
で非常にうまく機能します。sed
:)を使用することもできます。sed -n 5p file
; 5行目のみ。sed -n -e 5p -e 8p file
; 5行目と6行目のみ。sed -n 5,8p file
; 5番目と8番目の間の行。コンソールに行を出力します。テキストを選択することで簡単にコピーできます。