Metni sistem panosuna Vim'den nasıl kopyalayabilirim?


282

Bir metin bloğunu sistem panosuna kopyalamanın bir yolu var, böylece başka bir programa yapıştırabilir miyim?


12
Bu SO'da zaten sorulmuş ve cevaplandırılmıştır. Orada daha fazla ve farklı bilgi bulabilirsiniz.
bsmith89

1
Bu eklentiyi macvim christoomey / vim-system-copy üzerinde kullanıyorum ve çok seviyorum. Bu hareketleri ile gerçekten iyi çalışıyor cpip, cpi{.
Filype

2
Gerçekten ihtiyacınız olan şey EasyClip . Sadece bunu ve çok daha fazlasını yapacak ...
Scott Wade

Yanıtlar:


321

İçin X11 tabanlı sistemlerde (. Yani Linux ve diğer birçok UNIX benzeri sistemler) birbirinden bağımsız iki blokluk vardır:

  • PRIMARY - Bu seçime bağlı olarak kopyalanır ve orta fare tuşu ile yapıştırılabilir.
  • CLIPBOARD - Bu (genellikle) ile kopyalanır ^Cve yapıştırılır ^V(MS Windows gibi).

OS X ve Windows sistemleri sadece bir panoya sahiptir.

X11 sistemleri için bu panoları sizin için senkronize eden birçok araç vardır; bu yüzden aynı görünüyorlarsa, bunlardan birini çalıştırıyor olabilirsiniz.

Vim'de bu panolara karşılık gelen iki özel kayıt var:

  • *PRIMARY kullanır; anımsatıcı: S katran olduğunu S (copy-on için seçilen ler seçtiklerini)
  • +CLIPBOARD kullanır; mnemonic: CTRL PLUS C (ortak tuş bağlantısı için)

Windows ve OS X'te +ve arasında hiçbir fark yoktur *, çünkü bu sistemler yalnızca tek bir panoya sahiptir ve her iki kayıt da aynı şeyi gösterir (hangisini kullandığınızın önemi yoktur).

Bu kayıtları herhangi bir kayıt olarak kullanabilirsiniz. Örneğin, İLKÖĞRETİM panosunu kullanarak *ile yve pkomutları:

  • "*yy
  • "*p

Bunu daha uygun bir anahtar kelime olarak kullanabilirsiniz:

noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p

Her zaman manuel olarak kullanmak yerine, sistemin panosu ile arayüzü "otomatik olarak" yapmak istiyorsanız, clipboarddeğişkeni ayarlayabilirsiniz :

  • O ayarlayın unnamedkullanmak *(belirli üzerine, birincil)
  • Kullanmak unnamedplusiçin ayarlayın +(CLIPBOARD, ^C)

Şimdi, sadece kullanmak yyVim'in isimsiz kaydı yerine sistemin panosuna pgirecek ve sistemin panosunu yapıştıracak.

Ayrıca, bu kayıtlara tıpkı herhangi bir sicil gibi atayabilirsiniz let:

  • :let @+=42
  • :let @*=42

clipboardAyar (örneğin filtreleri hariç gibi) biraz daha seçenek vardır; ama bunlar temel. Tüm :help 'clipboard'hikaye için bakınız ;-)

gVIM

GVim kullanıyorsanız, kullanırken kopyala seçim davranışını elde edebilirsiniz :set guioptions+=a.
Bu, ancak X11 sistemleri (İLKÖĞRETİM için kopya) varsayılan olarak etkindir değil (Panonuzun geçersiz kılar herhangi bir metin seçmek gibi) MS Windows ve OSX üzerinde.

Hayır +clipboardmı?

Vim, +clipboardherhangi birinin çalışması için özellik bayrağını gerektirir ; senin Vim kullanarak bu olup olmadığını kontrol edebilirsiniz :echo has('clipboard')(çıkış ise Vim içerisinden 0, bu kadar değil o eğer mevcut 1olduğunu,) ya çıktısını kontrol vim --versioniçin +clipboard.

Çoğu Linux dağıtımı, varsayılan olarak sahip olmayan "minimum" bir Vim yapısıyla birlikte gelir +clipboard, ancak genellikle yükleyebilirsiniz:

  • Debian & Ubuntu: vim-gtkveya yükleyin vim-gnome.
  • Fedora: yerine kurun vim-X11ve çalıştırın ( daha fazla bilgi ).vimxvim
  • Arch Linux: install gvim(bu +clipboardnormalde mümkün olacaktır vim).

Ayrıca kullanabilirsiniz xclip, xcopyya da xselmetni panoya kopyalamak için; çözümler için aşağıdaki sorulara bakın:

SSH

SS11 üzerinden X11 iletmeyi etkinleştirirseniz, uzak makinelerde de bir pano kullanabilirsiniz. Bu özellikle yukarıdaki ipuçlarında kullanışlıdır, çünkü xclipmasaüstünüzün panosuna erişmek için kullanabilirsiniz . Parçaladığınız makinedeki Vim hala bu +clipboardözelliğe ihtiyaç duyacak .

Bu ForwardX11Trustedayar gerektirir ve yalnızca X11 oturumunuz üzerinde sunucuya neredeyse tam denetim sağladığı için yalnızca güvenilir sunucularla yapılmalıdır :

$ ssh -XY myhost

Bu ayarları kalıcı kılmak için ( -XYher seferinde ekleme yapmanıza gerek kalmaz ), aşağıdaki gibi bir şey yapabilirsiniz ~/.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 pano desteğini yeniledi. Dahili arayüz çıkarıldı ve bu şekilde bir dış yardımcı çağrı sistemi ile değiştirildi xclip, xselya da pbcopy/ ' pbpaste.

Bu yardımcı programları otomatik olarak almalı ve kullanmalıdır. OS X'te pbcopy ve pbpastevarsayılan olarak erişilebilir olması gerekir, Linux'ta muhtemelen xclipen çok kullanabileceğiniz sürüm olduğundan yüklemek istersiniz (aslında uyumsuz bayraklara sahip iki sürümü vardır . Bu gerçekten aptalca).xsel

Ayrıca :help clipboardNeovim'de bakınız .


6
ssh -Y, -X ifadesini -X ihmal edilebilir diye belirtir.
hildred

Bazı uluslararası klavyelerde, "<Space>almak için tuşuna basmanız gerekebilir ". Bu durumda , kopyalamak için basmanız "<Space>+yveya basmanız gerekir "<Space>*y.
Arthur F

1
Bunu öğrenmenin (birkaç yıl önce) benim için çok ilginç bir yan etkisi, "adlandırılmış birçok kaydı seçebilecek olduğudur. "+sihir değil, sadece kayıt +. Yani, örneğin, aynı anda üç şeyi kopyalayıp tek tek yapabilirsiniz bunların her yapıştırmak istiyorsanız "1y, "2yve "3ydaha sonra "1p, "2pve "3p. Bu gerçekten güçlü ve neredeyse hiç bir editörde yoktur. Diğer ilginç bir kullanım da depolanmış makrolara bakmaktır. Örneğin, kayıt yaparsanız qq, ancak düzeltmeniz gerektiğini anlarsanız, şunları yapabilirsiniz: temp satırında "qp, düzeltmek ve "qd.
Shahbaz

1
Sadece bir not: OS X iki ayrı panoya sahiptir. Birine Cmd-C ve Cmd-V kullanılarak diğeri emacs Ctrl-K ve Ctrl-Y tuşlarına basılarak girilir.
BallpointBen

3
@ shahbaz - büyük olasılıkla metin silindiğinde numaralandırılmış numaralar değiştiğinden harf kayıtlarını bu amaçla kullanmak daha iyi.
evilsoup

18

Diğer cevaplar, tamponunuzdaki metni sistem panosuna nasıl kopyalayacağınızı kapsar. Başka bir ortak çalışma başka metin kopyalamak için kayıt panoya. Örneğin, içine zaten bazı metinler eklediyseniz "(varsayılan kayıt), bu kaydı panoya yüklemek isteyebilirsiniz.

Bunu ile yapabilirsiniz :let:

  • let @+=@" - varsayılan kayıt defterini panoya kopyalar
  • let @*=@" - varsayılan kaydı X11 birincil seçimine ("fare panoya") kopyalar
  • let @+=@a- kayıt defterinden apanoya kopyala
  • vb.

Bunun genel olarak kayıtlar için geçerli olduğuna dikkat edin: let @a=@bkayıt biçin kopyalar a.


17

Gönderen http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus

Bu, varsayılan Vim kaydını +sistem panosuna bağlı olan kayıt defterine değiştirir . Kimden :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 örnekleri arasında yank yapıştırın (her biri ayrı bir sonlandırıcı terminalinde), bu neden benim için çalışmıyor?
thinwybk

Eğer Linux kullanıyorsanız ve Vim + X11 özelliği ile derlenmişse ve clipboard = unnamedplus ayarınız varsa, o zaman bir vim örneğinde bir çizgi çizebilir ve başka bir vim örneğine yapıştırabilirsiniz. CTRL + V veya ÜST KRKT + INSERT ile başka bir uygulamaya yapıştırabilirsiniz. :versionİçerdiği özellikler listesinde + X11'in görünüp görünmediğini görmek için Vim içinde kullanabilirsiniz . Ayrıca 'isimsiz' özelliğinin mevcut olup olmadığını kontrol edebilirsiniz. :if has('unnamedplus')⏎ echo 'yes'⏎ endif Eğer Linux'ta değilseniz, isimsiz yerine kullanmanız gerekir.
Quincy Bowers,

10

Onu destekleyen yapılarda, adlandırılmış kayıt *sistemi sistem panosudur. Vim'den sistem panosuna metin "*ykopyalamak için , görsel modu kullanarak metni seçebilir, ardından sistem panosuna kopyalamak için tuşuna basabilirsiniz .

Tersine, "*pmetni sistem panosundan Vim'e yapıştırmak için kullanın .


5

Gvim kullanmanızı öneririz ve şunu da ekleyin .vimrc:

source $VIMRUNTIME/mswin.vim
behave mswin

Bu destek sağlayan CtrlC, CtrlX, CtrlVWindows not defteri gibi.

Bu da örneğin, diğer bazı yaygın, Windows kısayollarını katacak unutmayın CtrlSiçin :w, CtrlAtüm seçmek vs.



0

Diğer her cevap, kayıtlarla ilgili tüm önemli hususları kapsamıştır. Kullandığım bir şeyi daha eklemek istiyorum.

Vim'de görsel olarak seçilen metni doğrudan panoya kopyalamanın bir yolu var . Sadece bunu vimrc dosyanıza koyun :

set guioptions+=a

Ve bununla görsel olarak bir metni ne zaman seçerseniz, panoya kopyalanacaktır. Bu konuda daha fazla bilgi için,:help guioptions

Btw, bu sadece gVim içindir.


2
guioptions+=aCarpetsmoker'in cevabında da bahsedilmiştir.
muru

@muru Evet, özür dilerim. Bunu daha önce görmedim. Sadece gördüm.
Durga Swaroop

0

Ayrıca panoya belirli bir desen koymak için global bir komut kullanabilirsiniz. Bilginin bir dosyaya dağıldığı ve elle başa çıkmanın hatalara ve yorulmaya eğilimli olduğu durumlarda faydalı olabilir.

Önce bilgileri alacak olan kayıt defterini temizle

:let @a=""

Sonra deseni içeren tüm satırları kopyalayın.

:g/pattern/yank A

Sonunda bilgileri sistem panosuna aktarma (kopyalama)

:let @+=@a

panoya "içerik" içeren her satırı doğrudan panoya kopyalamaya çalışırsanız, pano yeni içerik ekleme özelliğine sahip olmadığından çalışmaz; bir kerede desen ve sonra panoya koyarak.

OBS: Kullanmadan önce yazıcının tutulması gerekir ve yazıcının UPPERCASE sürümünün kullanılması bize içerik eklememize izin verir, aksi halde çalışmaz.


0

Nasıl +clipboardişe yarayacağımı bulamıyorsanız, ki nedense yapamadım, o zaman bunu yapabilirsiniz.

Yapmam, sadece dosyanın bir bölümünü kopyalamak istediğiniz varsayarsak shift+ vgörsel moduna geçmek ve sadece ben kopyalamak istediğiniz satırları vurgulamak için. O zaman bunu yapıyorum.

# Linux Wayland
:'<,'>w !wl-copy

# Linux Xorg
:'<,'>w !xclip -selection clipboard

açıklama

  • '<,'> - bir aralık seçmek için görsel modu kullandığınız anlamına gelir (bunu yazmazsınız)
  • w !{cmd}- menzili stdin'e yazın cmd, daha fazlası için:help w_c
  • wl-copyve xclipmetinleri yayınlayabileceğiniz programlardır ve sistem panonuza eklerler.

Ayrıca, bu sizin tarihinize girdiğinde, her şeyi bir daha yazmak zorunda değilsiniz. Sadece görsel mod ile seçin, yazın wsonra yukarı basın ve komut otomatik olarak tamamlanmalıdır. Ayrıca, görsel modu kullanmak zorunda değilsiniz. İstediğiniz aralığı ayarlayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.