Tüm satırları panoya kopyala


564

VI satırında açık satırdan panoya tüm satırları kopyalamak için herhangi bir yolu var mı. Denedim yGama bu satırları saklamak için pano kullanmıyor.

Bu mümkün mü?



1
Windows'daysanız ve yank çalışmıyorsa, üstten 17. cevaba bakın: stackoverflow.com/questions/1620018/…
Noumenon

Yanıtlar:


636

Metni şuna *veya + kayıtlara çekmelisiniz :

gg"*yG

Açıklama:

  • gg imleci dosyanın ilk karakterine götürmek için
  • "*y*ilk satıra kayıt için bir yank komutu başlatmak için ...
  • G dosyanın sonuna gitmek

6
Metni tuşlara benzeyecek şekilde nasıl işaretlersiniz? Bunu henüz SO'da görmedim.
jergason

10
Merhaba ... çalışmıyor mu? Pano verileri değişmeden kalır. gg imlecini yazdığımda ilk satıra gider ... ama "* yG ..cpu 'da * bip sesi
duyduğumda

1
Deadkey'leri etkinleştirdiniz mi? (örneğin, 'a' tuşuna bastığınızda á alırsanız) Sonra boşluk tuşuna basmanız gerekir ".
Tordek

144
Vim, sistem panosuna yalnızca xterm_clipboard etkin olarak derlenmişse erişebilir. Bu özelliğe sahip olup olmadığınızı öğrenmek için :versionvim'de çalıştırın ve +xterm_clipboardbayrağı arayın . Öncesinde eksi işareti varsa, bu işlevselliğe sahip olmayacaksınız. Bu durumda, vim'i kendiniz derlemek veya genellikle bu özelliğe sahip olan gvim'i çalıştırmak isteyebilirsiniz.
nelstrom

9
Bu yaklaşımdaki sorun imleci hareket ettirmesi ve pencereyi kaydırmasıdır. İki defa. Diğer cevap çok daha az tuşlama vardır ve sakıncaları :)
sehe

696

kullanın:

:%y+

tüm çizgileri çekmeye.

Açıklama:

  • % tüm satırlarda çalışmak için bir sonraki komutu referans almak
  • y bu çizgileri çekmek
  • + sistem panosuna kopyalamak için

Not : Windows +ve *eşdeğerde bu cevaba bakınız .


19
Ayrıca imleç konumunu değiştirmez.
nperson325681

1
@guangnan: Bu kayıtlar vi'de mevcut değil; sadece vim. :helpAslında vim olduğunuzdan emin olmak için yazmayı deneyin .
Göze Çarpan Derleyici

6
Ben gerekli set clipboard=unnamed, ama sonra bu harika çalıştı!
cdunn2001

234
Vim diyor ki E850: Invalid register name:(
lony

23
Bu çözüm yalnızca vim pano seçeneğiyle derlenmişse çalışır (vim --version + pano gösterilecektir). Değilse, Brian'ın çözümü (:% w! Pbcopy) Mac için bir çözümdür. Diğer işletim sistemleri için alternatifler mevcuttur (örn. Xclip).
yaccob

90

Mac'te

  • seçili parçayı kopyala: metni görsel olarak seç (tür vveya Vnormal modda) ve yaz:w !pbcopy

  • tüm dosyayı kopyala :%w !pbcopy

  • panodan geçmiş :r !pbpaste


6
Sorunsuz çalışır. Komutların açıklaması gerçekten iyi olurdu.
Vlad Manuel Mureșan

5
@Geo pbcopybir Mac yardımcı programıdır. Linux'ta, xselbunun yerine veya clipWindows'ta çalışabilir .
David Lord

1
Dosya terminalinizin yüksekliğinden daha uzunsa bu çalışmaz.
Sridhar Sarnobat

1
@SridharSarnobat :%w !pbcopy, dosya terminalin yüksekliğinden daha uzunsa yine de çalışır.
Adrian Schmidt

Oh özür dilerim, istemcinin bir Mac ve sunucunun Linux olduğu (yani OP'nin aradığı şey olduğunu varsaydım ama şimdi düşündüğümde, bu ilgisiz bir sorun). Savunmamda, yerel dosyaları kopyalamak ve yapıştırmak için vim'den kaçınırdım, ama bu benim kişisel zevkim. İyi tavsiyeler.
Sridhar Sarnobat

56

Pano arabellektir +. Panoya kopyalamak için yapın "+yve [hareket] yapın.

Böylece, gg"+yGtüm dosyayı kopyalar.

Benzer şekilde, panodan yapıştırmak için, "+p


4
Sadece buna eklemek için (4 yıl sonra ...), imleç konumunuzun dosyanın üst kısmına atlayacağı için bunun küçük bir dezavantajı vardır. Bundan kaçınmak için (örneğin, bunu vimrc'nizdeki bazı kısayollarla eşliyorsanız) aşağıdaki gibi bir şey yapabilirsiniz: mqgg "+ yG`q
Tom Lord

45

VI kullanarak sorun yaşıyorsanız, tüm dosyayı kopyalamanın bir başka kolay yolu da sadece "cat dosya adı" yazmaktır. Dosyayı ekrana yansıtır ve sonra yukarı ve aşağı kaydırıp kopyalayıp yapıştırabilirsiniz.


1
E603:: Olmadan yakala: dene
Paul Chris Jones

2
Eğer vim bırakmadan bunu yapmak istiyorsanız, aşağıdaki komutu çalıştırabilirsiniz: :!cat %. Ve dosyanın içeriğini programlı olarak Mac OS'de panoya kopyalamak için::!cat % | pbcopy
TanguyP

Windows'ta Ubuntu VM'den tarayıcı penceresinde açılan GCP'de Debian'a dosya kopyalamak için gerekli ...: / Vim yanking varyasyonları işe yaramadı, bu Windows'a yapıştı ve ardından GCP'ye dosya yükledi.
frmbelz

31

Tüm dosyayı çekip çıkarmak için yaptığım şey bu:

ggVGy

12
Korkarım bu panoya değil, varsayılan kayıt için soran gibi, soruya cevap vermez.
Göze Çarpan Derleyici

2
@ConspicuousCompiler, çekili clipboardmetni +yine de kopyalamak için ayarlamış olsaydı olurdu .
TankorSmash

@TankorSmash en hızlı (:% y) veya neatest (en azından ggyG daha iyidir) yöntemi değil.
pedroapero

@ConspicuousCompiler Varsayılan kayıt ve pano arasındaki fark nedir?
nilon

16

Dosya açmak için "cat" komutunu kullanabilir ve kopyalamak için fareyi kullanabilirsiniz


5
Ama bu "vi" yolu olmayacak, eğer dosya büyükse o zaman da bir sorun olacak ... Bu işe yarayabilir ama önerilen bir yol değil ...
Aditya

1
resetönce terminali seçin, ardından tümünü seçin ve kopyalayın. Bu sshoturum boyunca çalışır .
arcol

Xterm_clipboard kullanılamıyorsa farklı uzak sunuculardaki büyük dosyalar (10 bin satırın altında) için en hızlı yol
Matias Haeussler

10

(@rshdev'e yanıt olarak ve OP hakkındaki yorumlarda @nelstrom başına + xterm_clipboard ile vim'i derlemek zorunda kalmamak için)

Ubuntu 11'de putclip gibi çalışan xclip adında bir program var:

:%!xclip -sel clip
u

varsayılan olarak yüklenmez. yüklemek için kullanın:

sudo apt-get install xclip

10

Ubuntu 12 hakkında

vim-gnomepaketi yüklemeyi deneyebilirsiniz :

sudo apt-get install vim-gnome

Çünkü denedim vim --versiono bayrak olurdu söyledi xterm_clipboard devre dışı (ile gösterilir - Pano işlevselliği kullanmak için gereklidir).

-> vim-gnome paketinin Ubuntu 12 üzerine kurulması, bu seçeneğin etkinleştirildiği ( xterm_clipboard bayrağından önce + işaretiyle gösterilen) konsolun vim sürümünü de yükledi.

Arch Linux'ta

vim-clipboardaynı nedenden dolayı kurabilirsiniz .

Neovim'i çalıştırırsanız, yüklemeniz gerekir xclip(açıklandığı gibi help clipboard-tool)


1
unix.stackexchange.com/questions/25965/… Başkalarının bildiği başka bir seçenek var mı?
Sandip Pingle

6

Vim'i görsel modda kullanıyorsanız, standart kes ve yapıştır tuşları en azından Windows için de geçerlidir.

  • CTRLA "Tüm dosyayı işaretle.
  • CTRLC "Seçimi kopyala" anlamına gelir.
  • ESC "Seçimi kaldır, yani bir sonraki tuş basışınız dosyanın tamamını değiştirmez :-)

En azından Ubuntu terminali (Gnome) altında standart kopya da çalışır ( CTRLSHIFTCancak standart bir klavye kısayolu olmasa da select all( ALTEbunu takip etmekten başka A).


6
Ancak mswin.vim kullanmıyorsanız, ctrl-a geçerli satırdaki bir sonraki sayıyı artırır.
Mark Rushakoff

@Mark, bu davranış standart bir Vim kurulumudur, bu yüzden varsayılan olduğunu varsayalım. Ortam farklı bir şekilde yapılandırılırsa tüm bahisler kapalıdır, ancak durum böyleyse, OP'nin ne yaptığını bildiğinden şüpheleniyorum :-) Her iki durumda da OP, bir yorumda Ubuntu'da olduklarını belirtti. cevabım muhtemelen geçerli değil. Gnome terminali yapardı.
paxdiablo

5

imlecinizi dosyanın başlangıcına bulmak için gg tuşuna basabilir, ardından baştan başa (G bulunan) tüm içeriği buffer'a kopyalamak için yG tuşuna basabilirsiniz. iyi şanslar!


4

İnsanların yukarıda bahsettiği komutlardan birkaçını denedim. Hiçbiri işe yaramadı. Sonra hepsinden basit olanı yakaladım.

Adım 1: vi <filename>
Adım 2: Macun penceresinin başlık çubuğunu sağ tıklayın
Adım 3: "Kaydırma işlemini temizle" yi seçin (SSH oturumunuzun geri kalanını kopyalamaktan kaçınmak)
Adım 4: Tekrar sağ tıklayın ve "Tümünü panoya kopyala" yı seçin.


1
15000 satır dosyası için bu her şeyi kapmadı. Putty'lerimi Window > Settings > lines of scrollback40000'e çıkarmam gerekiyordu (başlık çubuğuna sağ tıklayarak da mevcut). Ayrıca cattüm metin içinde kaydırdığı için vi yerine kullanılmasına yardımcı olur .
Noumenon

1
Her zaman dosyanın üstünden ve altından bu şekilde satırları kaybettim. Şimdi yaptığım kedi, daha sonra seçimi uzatmak için dosyanın başlangıcında ve sonunda orta tıklayın.
Noumenon

Bunu denediğimde sadece ekranda 111 satır var ama
dosyamda

3

:%y aTüm içeriği vim arabelleğine sorar p, Komut modunda basıldığında , atılan içerik imlecinizin şu anda bulunduğu satırdan sonra yapıştırılır.


3

gVIM:

:set go=a

ggVG

Bakınız :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

Tüm bu yaklaşımlar ilgi çekicidir, ancak tembel programcı olarak + y

Örneğin, toplam 78 satırlı kaynak kodu dosyanız var, aşağıdaki gibi yapabilirsiniz:

  1. gg imleci ilk satıra almak
  2. 78 + y -> ekle imlecinizin ve geçerli satırınızın altında 78 satır çeker

2

Bill Joy'un vi'sında "pano" kavramı yoktu, bu yüzden bunu yapmanın yerleşik bir yolu olduğunu düşünmüyorum.

gVim'in panoya otomatik olarak vurgulanan her şeyi kopyalama özelliği en kolay olanıdır veya harici bir programı şu yöntemle kullanır:!

Cygwin'in vim'i için kullanıyorum

:%!putclip
u

Belki Ubuntu putclip gibi bir CLI uygulaması var ??


büyük öneri, teşekkürler! xclip adında bir program var. ayrıntılar için, ayrı bir cevap yayınladım (ekstra satırlar ve kod biçimlendirmesi olmadan bir yorumdan okumak çok kafa karıştırıcı olurdu).
Güveç

2

Parmaklarınız varsayılan olarak CTRL-A CTRL-Cayarlıysa, eşleştirmeleri deneyin $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

Ben onları eşledim <Leader><C-a>ve <Leader><C-c>.


2

Tüm dosyayı vim veya sekmelerinin içine kopyalayın

y G 

sonra bir sekmeye gidin ve yapıştırın

p

ve tüm dosya kullanımını kesmek için

d G

2

.Vimrc dosyasına aşağıdaki satırı ekledim

nnoremap <F5> :%y+<CR>

Bu, F5(komut modunda) düğmesine basarak Vim'deki tüm metni panoya kopyalamamı sağlar .


1

CTRL+ Kullanarak tüm panoya seçmek için bir harita komutu a:

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

Bunu .vimrc'nize ekleyin ve hazırsınız ...


1

Bu konuda on yılın çözülmesi gerektiğini biliyorum, ancak ilk iki cevap benim için işe yaramadı, bu yüzden kazmaya devam ettim. Redhat (uzak sunucu) - Windows 10'da (yerel makine), her şeyi bir fare ile seçemezseniz, normal kopyalar uzak ve yerel makine panoları arasında çalışmadığından sıkışmışsınızdır.

Bu nedenle, uzak Linux'a kopyalamak ve yerel Windows'a yapıştırmak için, birincil arabelleği belirtin *ve güzel bir çift yank yapın

Kullanın gg" * yy.


0

Bu eylemi gerçekleştirmek için bir işlev oluşturdum ~/.vimrc.

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

OBS: neovim kullanıyorsanız, xclip gibi bir pano yöneticisine de ihtiyacınız var. daha fazla bilgi için neovim:h checkhealth

Her zaman basit değil söz de önemlidir yher kopya beslemesini yapmak için, panoya kopyalar +"Pano Kayıt" setine deneyin wich: :set clipboard=unnamed,unnamedplus. İçin mor bilgi bkz: :h unnamed.

Burada vim wikia hakkında daha fazla bilgi.


0

Bunun gibi bir shortcur kullanabilirsiniz:

noremap <F6> :%y+<CR>

Bu, F6'yı normald modunda ittiğinizde, tüm dosyayı kopyalayıp panoya ekleyeceği anlamına gelir. Ya da sadece normal moda girebilir :%y+ve daha sonra itebilirsiniz Enter.


-1

Sol fare düğmesini tıklayın, kopyalamak ve serbest bırakmak istediğiniz bölüm boyunca sürükleyin. Kod otomatik olarak panoya kopyalanır.


3
Dosya çok büyük olabilir ve metnin tamamını bir fare ile sürüklemek verimli değildir (ne de bir viyoludur).
Dr Beco

1
Aslında bu iyi bir cevap ve benim için çalışıyor. Sistemimde çevre v kısıtlayıcıdır. Ekranda çıktı cat, ve sonra sürükleyin, seçin ve serbest bırakmak için fareyi kullanmak zorunda .. sonra Windows Notepad ++ .. kopyalayın ve harika çalışıyor. Başka hiçbir şey çalışmıyor.
Apurva Singh

-1

Yukarıdaki cevapları kullanarak dosyaları kopyalayamadım ama macunum var ve Quora'da bir çözüm buldum.

  1. PuTTY oturumunuzun ayarlarını değiştirin, günlüğe gidin ve "yazdırılabilir karakterler" olarak değiştirin. Günlük dosyasını ayarlama
  2. İlgili dosyanın bir kedisini yapın
  3. 1. adımda ayarladığınız dosyaya gidin, içeriğinizi günlük dosyasında bulacaksınız.

Not: oturumun tüm basılı karakterlerini günlük dosyasına kopyalar, böylece sonunda büyür. Bu durumda, günlük dosyasını silin ve hedef dosyayı kopyalayın, böylece söz konusu dosyanın içeriğini makinenize kopyalayın.

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.