Ekleme modunda yapıştırılsın mı?


385

Vim'de kesici uç moduna yapıştırmak mümkün müdür?

Yanıtlar:


465

Ekleme modundayken CTRL-R {register}

Örnekler:

  • CTRL-R * panonun içeriğine ekleyecek
  • CTRL-R " (adsız kayıt) son silme veya kaydetmeyi ekler.

Bunu vim'in yardım türünde bulmak için :h i_ctrl-r


13
Evet, sadece yakın zamanda CTRL-R'yi öğrendim ve son derece yararlı.
Dan

16
CTRL-R *yalnızca GVIM'de veya x ile etkileşime girecek şekilde derlenmiş sürümlerde çalışır. Yazın vim --versionve arayın +xterm_clipboard. Buna sahip değilseniz, farklı bir vim sürümüne ihtiyacınız var. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
Conrad.Dean

10
Aslında sadece ihtiyacın var +clipboard, ama eğer sahipsen buna sahip +xterm_clipboardolmalısın. Bazı işletim sistemlerinde xterm_clipboardgeçerli değildir.
Andrew Marshall

1
Hmm, Windows'ta sistem panosundan yapıştırmak için C-r + kullanıyorum (taşınabilir GVim kullanarak)? * Kayıt işlemini hiç duymadım.
kitsu.eb

6
@ kitsu.eb X sistemlerinde *yazmaç orta fare tıklaması ile +yapıştırılabilirken, geleneksel kopyala / yapıştır yöntemidir . standards.freedesktop.org/clipboards-spec/clipboards-latest.txt
amc

235

Eğer Vim yapıştırılan metni, gelen biçimlendirme parçalamaya istemiyorsanız, ayrıca kullanmayı düşünün isteyebilirsiniz: :set paste. Bu, Vim'in kodunuzu yeniden sekmesini önleyecektir. Yapıştırma işlemi tamamlandığında :set nopaste, normal davranışa geri döner.

set pastetoggle=<F2>.Vimrc'nize benzer bir şey ekleyerek modu tek bir tuşla değiştirmek de mümkündür . Geçişli otomatik girintiyi değiştirme hakkında daha fazla ayrıntı burada .


47
:set nopasteyapıştırma modunu devre dışı bırakacak
James Snyder

24
@JamesSnyder Daha iyi bir yol, :set paste!komut geçmişinizde muhtemelen macun ayarının çok yakın olmasıdır, bu nedenle ':' tuşuna basmanız, ardından ok tuşuna basmanız ve bir '!' İşareti eklemeniz yeterlidir.
Rafael Barbosa

6
Sadece merak - :set paste! Teşekkürler hakkında daha iyi veya farklı ne :)
Michael Durrant

33
!içinde komutun sonunda vimaçık ve kapalı durumları ya komut. Bu şekilde yazmak zorunda kalmazsınız, :set nopastebunun yerine geçmişinizde yukarı doğru ilerleyebilir ve aynı komutu ( :set paste!) tekrar çalıştırabilirsiniz .
바이 바

3
@blockloop Yapıştırırken etkinleştirmeniz ve hemen ardından devre dışı bırakmanız gerekir.
NieDzejkob

125

Hayır doğrudan değil. Bununla birlikte, tek bir normal mod işlemi için ekleme modundan hızlı bir şekilde çıkıp Ctrl-Osonra ekleme moduna geri dönecek şekilde yapıştırabilirsiniz.

Tuş Kombinasyonu: Ctrl-O p

EDIT: İlginç. Diğer insanların listelediği gibi bir yol var gibi görünüyor.


2
ctrl-r "benim için çalışmıyor (os x, terminalde vi). ctrl-o p yaptı.
Bob

4
Bu hatırlamanın en hızlı ve en kolay yoludur.
pinpox

Ne olmuş esc + p?
sitilge

2
Kesinlikle daha hızlı esc + p + ive yazmak için kesinlikle daha kolayCTRL-R + "
lucidbrot

Aslında, bu bazen farklı davranır CTRL-R ". Örneğin, vimrc ayarları bunu değiştirebilse de, kullanarak yeni bir satıra bir şeyler yapıştırmak CTRL-O pgirintisini ortadan kaldırır.
noname

30

Ekleme modundayken, kaydın şunlar olabileceği Ctrl-R {register}yerlerde kullanabilirsiniz :

  • + pano için,
  • * X panosu için (X'te son seçilen metin),
  • " isimsiz kayıt için (Vim'de son silme veya çekilme),
  • veya başka bir dizi (bkz. :h registers).

Ctrl-R {register} metni sanki girilmiş gibi ekler.

Ctrl-R Ctrl-O {register} metni orijinal girintiyle ekler.

Ctrl-R Ctrl-P {register} metni ekler ve otomatik olarak girintiler.

Ctrl-Oekleme moduna dönmeden önce herhangi bir normal mod komutunu çalıştırmak için kullanılabilir, bu nedenle
Ctrl-O "+pörneğin kullanılabilir.

Daha fazla bilgi için şu belgelere bakın: :h i_ctrl-r


4
Bu cevap en kapsamlı gibi görünüyor. Çok açık ve bence en faydalı. OP'nin sorusunu ve sonra bazılarını kısaca cevaplıyor.
Devvyn

26

Panodan aşağıdakileri yapıştırmak için bunu kullanabilirsiniz Ctrlv:

set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>

Ve bu görsel seçimi panoya şu şekilde çekmek için Ctrlc:

vnoremap <C-c> "+y

Normal modda klasik vim yanma / yapıştırma ( y/ p) için panoyu varsayılan olarak kullanmak istiyorsanız , bunu yapan bir yapılandırma seçeneği vardır:

set clipboard=unnamedplus

Bu yapılandırmalarla, örneğin önce normal modda yank, sonra Ctrlvekleme modunda yapıştırabilirsiniz . Ayrıca, farklı vim örneklerinden ve farklı uygulamalardan metin yapıştırabilirsiniz.

Başka bir seçenek:

set clipboard=unnamed

Daha sonra X ortamınızda fareyi sürükleyerek bir şey seçebilir ve daha sonra vim'e yapıştırabilirsiniz. Ancak (bir nedenden dolayı) Vim'de bir şey ( y) çekemezsiniz ve shiftinsertdaha sonra başka bir yerde, muhtemelen oldukça sınırlayıcıdır.

Vim bu konuda dokümanlar: http://vim.wikia.com/wiki/Accessing_the_system_clipboard

Özel kayıtlardan yapıştırmak için diğer cevapları takip edebilirsiniz :). Bu cevap esas olarak Vim'i sistem panonuza entegre etmekle ilgilidir.


Not için bu set clipboard=unnamedplusve set clipboard=unnamedişe, use gvim veya vimx (gerek vim-X11): Bunlar ile derlenmektedir +xterm_clipboard. İsterseniz içine koyabilirsiniz .bashrcdiğer adına vimsahip vimx:

if [ -e /usr/bin/vimx ]; then
    alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi

Sağladığınız +xterm_clipboardbilgilerde vim'inizin olup olmadığını öğrenebilirsiniz vim --version.


7
Tam da aradığım şey buydu. Ayrıca buradaki tek makul cevaptır. Kişi işlerin böyle çalışmasını bekler. Herkes :set pasteve bizansın varsayılan davranışının neden <leader><leader> * yuzaktan arzu edildiğini biliyor mu? Çok kararlı gelmemek için, bunun vim felsefesinin ne yansıttığını ya da sadece tarihsel bir talihsizlik olup olmadığını gerçekten merak ediyorum.
Aeschylus

Cevabınız Gvim'de Shift + Insert tuşlarını da kullanmama izin verdi inoremap <S-Insert> <F12><C-r>+<F12>(Yapıştırım olarak F12 kullanıyorum). Teşekkürler.
sromero

20

Vim'i sistem panosunu ( :set clipboard=unnamed) kullanacak şekilde ayarlarsanız, Vim'de kopyaladığınız herhangi bir metin Shift+ kullanılarak yapıştırılabilir Insert. Shift+ Insertbasitçe işletim sistemi genelinde bir yapıştırma tuş kombinasyonudur ( Ctrl+ Insertkarşılık gelen 'kopyadır').


1
S-Insert hakkında bilmiyordum :)
BandGap

Bu tersine mi çalışıyor? Will ppanoya metni yapıştırmak?
Zaz

Shift + InsertMetni yapıştırmak için kullanmadan önce ekleme modunda olmamız gerekir.
jdhao

18

Ekleme moduna yapıştırmak için farenin orta düğmesini de kullanabilirsiniz (yalnızca Linux).


106
Bahsettiğiniz bu fare nedir?
Jim Mitchener

19
Bahsettiğiniz linux olmayan bu işletim sistemleri nelerdir?
Bruno Bronosky

-1: Bu yanıt büyük ölçüde donanım ve terminal ayarlarına bağlıdır. Sonuç olarak, faredeki düğmeler terminale önceden ayarlanmış bir dizeler gönderir ve terminal belirli bir komutu yürütmek için bu dizeyi ayrıştırır. Sorun, bu, terminal ayarlarına bağlı olarak büyük ölçüde değişebilir. Bu yanıtı geliştirmek için lütfen en azından terminalin, işletim sisteminin sürümünü ve kullandığınız fare sürümünü ve modelini sağlayın.
melvynkim

Orta fare düğmesi yapıştırma, terminal veya işletim sistemi sürümleriyle sınırlı olmayan tüm Linux uygulamalarında oldukça yaygındır.
lcltj

Arch Linux + urxvt ile çalışmaz. Yalnızca yeni satır ekler.
17:41

5

Moda aşağıdaki yollarla girebilirsiniz -- INSERT (past) --:

  • Klavye kombinasyonu: y p

veya

  • :set pasteve ekleme moduna girme ( :set nopastedevre dışı bırakmak için)

-- INSERT (past) --modda bir kez sistem yapıştırma işlevinizi kullanın (örneğin CtrlShiftvLinux'ta, CmdvMac OS'de).

Ssh üzerinde vim kullanırken bu strateji çok kullanışlıdır.


4

Evet. Windows Ctrl+ Vve Linux'ta her iki fare düğmesine de neredeyse aynı anda basmak.

Windows'da benim _vimrc bu satır muhtemelen yapar düşünüyorum:

source $VIMRUNTIME/mswin.vim

Linux'ta bunu nasıl yaptığımı hatırlamıyorum. Muhtemelen varsayılan .vimrc dosyasından bazı satırları sildim.


Bir kereden fazla upvote edebilir miyim ?? Sadece başka bir pencereden geldiğimde yapıştırmak istiyorum - bu yüzden her zaman farenin üzerindeyim. Parlak!
dave

Linux'ta farenin orta düğmesine basarak yapıştırabilirsiniz. İki düğmeli fareniz varsa ve hem sol hem de sağ düğmeye basarsanız, bu şekilde çalışmak için "Emulate3Buttons" veya benzeri bir öğeye ihtiyaç duyar.
Puma

0

Ekleme Modunda Yapıştır

Bu durumda özel bir harita uygun görünüyor. Yankılanan öğeleri ekleme modunda yapıştırmak için kullandığım şey budur:

inoremap <Leader>p <ESC>pa

Benim Leaderanahtar burada \; bu \p, ekleme modunda vurmanın daha önce çekilmiş öğeleri / satırları yapıştıracağı anlamına gelir .


0

Sadece harita ekleyin:

" ~/.vimrc
inoremap <c-p> <c-r>*

vim'i yeniden başlatın ve Crtl+pekleme modundayken, kopyalanan metin yapıştırılacaktır

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.