Vim ile yeni bir satıra nasıl yapıştırılır?


144

Sık sık vim'deki yeni bir satıra bir şeyler yapıştırmam gerekiyor. Genelde yaptığım şey:

o<Esc>p

Bu, yeni bir satır ekler ve ekleme modundan çıkar ve nihayet yapışır.

Üç tuş vuruşu. Çok verimli değil. Daha iyi bir fikrin var mı?


8
3 tuş vuruşu etkili değil mi?
gtd

60
1 veya 2 daha iyi olurdu :) Neden maksimum verimlilik için değilse vim kullanıyorsunuz?
static_rtti

2
Ayrıca, kopyalanan içerik bir satırsonu ile biterse fazladan bir satırsonu ile sonuçlanır.
Jonathan W.

1
@gtd Normal bir editör <Enter> <CV> ile çalışır. İki tuş vuruşu.
user4052054 15:19

1
@ user4052054 hayır, bu aynı şeyi yapmaz, hatta nerede olursanız olun o / O çalışır, normal bir editörde önce satırın başına veya sonuna gitmeniz gerekir. Ayrıca, tüm bir satırı kopyalıyorsanız, her şey bir satır eklemek için sadece bir tuşa dönüşür, bu da kodlamada çok daha yaygın bir öneridir.
gtd

Yanıtlar:


71

Kısa bir süre sonra :help p:

:[line]pu[t] [x]    Put the text [from register x] after [line] (default
                    current line).  This always works |linewise|, thus
                    this command can be used to put a yanked block as
                    new lines.

:[line]pu[t]! [x]   Put the text [from register x] before [line]
                    (default current line).

Maalesef, farklı bir yanıtta önerildiği gibi bazı klavye haritalarıyla birleştirmediğiniz sürece mevcut çözümünüzden daha kısa değildir. Örneğin, herhangi bir tuşla eşleştirebilirsiniz (çift p):

:nmap p :pu<CR>

2
Bunu biliyorum ve kullanıyorum, ama sorduğum şey bu değil, çünkü bazen kopyaladığınız şeyin içinde herhangi bir LF yok. "Yeni bir satıra yapıştır" komutu olsaydı, yapıştırmak üzere olduğunuz içeriğe bakılmaksızın çalışır, bu yüzden bunu düşünmek zorunda kalmazsınız.
static_rtti

5
Tamam, :pu[t]metni geçerli satırdan sonra yeni bir satıra :pu[t]!koyar, metni geçerli satırdan önce yeni bir satıra yerleştirir. Cevabımı buna göre düzenleyeceğim. (Yaşasın :help p.)
Bombe

2
Mevcut çözümümden gerçekten daha iyi değil, ama bence sorumun en iyi yanıtı.
static_rtti

4
Aynı sayıda tuşa basmakla birlikte, bunun daha etkili olduğunu düşünüyorum. o <Esc> p beceriksiz hissediyor, ama bunu yapmıyor.
Mark Story

2
Komutu p'nin kendisi de dahil olmak üzere herhangi bir anahtarla eşleyebilirsiniz: :nmap p :pu<CR>.vimrc dosyanıza koyun ve yola çıkın :)
Capi Etheriel

55

Seçenekler:

1) yyTüm satırı (satır sonu karakteri dahil ) çekmek için kullanın . pdaha sonra satırı geçerli satırdan sonra yeni bir satıra yapıştırır ve P( Shift-P yapıştırır ) geçerli satırın üzerine yapıştırır.

2) Bir eşleme yapın: o zaman sadece bir veya iki tuş vardır:

:nmap ,p o<ESC>p
:nmap <F4> o<ESC>p

3) Eşleştirmenin işlev sürümü (gerçekten gereksiz, ancak tamlık için):

:nmap <F4> :call append(line('.'), @")<CR>

" This one may be a little better (strip the ending new-line before pasting)
:nmap <F4> :call append(line('.'), substitute(@", '\n$', '', ''))<CR>

:help let-register
:help :call
:help append()
:help line()
:help nmap

2
Sanırım bir harita yapacağım. Standart bir çözüm olabileceğini umuyordum: - / Cevabınız için teşekkürler!
static_rtti

2
@AI: 'p' (',' işaretini <Leader> olarak eşledim) bence en iyi çözüm. Hatta kullanımı kolay bir işlev sağladınız. :) Harika!
Birisi hala seni MS-DOS'u kullanıyor

30

Yapıştırılacak arabellek <C-R>adını izleyerek arabellek ekleme modunda yapıştırabilirsiniz. Varsayılan arabellek ", yani

o<C-R>"

Ben <C-R>"çok sık kullandığımı buldum ve <C-F>benim vimrc için bağlı :

inoremap <C-F> <C-R>"

2
Bu harika çünkü kopyalanan satır girintili değilse girintiyi doğru tutar.
CornSmith

24

Bu hala üç tuş vuruşu kullanıyor, ancak Esc'den daha kolay buluyorum:

o<Alt-p>

O tuşuna bastıktan sonra ekleme modunda olduğunuz için, Alt değiştirici bir komutu siz değilmiş gibi kullanmanıza izin verecektir.


2
Yeni bir satırda "d $" ile satır içinde kestiğiniz yank sth denediğinizde oldukça kullanışlı bir yol
Serhat Cevikel

Üzgünüm, ama bu girintiyi tutmaz, bunun yerine satırın başına yapışır.
Michael Goldshteyn

Herkes mac için bu yöntemi detaylandırabilir (alt yok)?
Li haonan

@Lihaonan Sorunuz 8 ay önce, umarım stackoverflow.com/q/7501092/5407634
m_mlvx

12

Bu eklentiyi kullanarak: https://github.com/tpope/vim-unimpaired

]paşağıdaki satırdaki macunlar

[pyukarıdaki satırdaki macunlar

avantajları:

  • tüm tırnaklı metinler üzerinde çalışır (kelime, çizgi, karakter vb.)
  • yapıştırılan metni çevresindeki metnin girintisiyle eşleşecek şekilde girintiler
  • 3 yerine 2 tuş vuruşu ve çok daha kolay tuşlar
  • hızlı

1
Benim de favorim. tpope/vim-unimpairedBunun çalışması için ihtiyaç duyduğunuzdan bahsetmeye değer olabilir 😉.
alextes

1
Bunu çok uzun zaman önce kurdum, unuttum. hatırlatma için teşekkürler!
crogers

9

Şahsen ben Enter (CR) bu şekilde nmapped :

nmap <CR> o<Esc>k

... bu Vim Wikia makalesine dayanarak .

Bu şekilde doğrudan normal moddan yeni satırlar yapabilirim ve bunu aşağıdaki yeni satırlara yapıştırmak istemekle birleştiririm:

<CR>jp

Ayrıca atlamak k sizden ne tercih işlevselliği bağlı olarak yukarıdaki nmap'e içinde Enter sadece olurdu bu yüzden,<CR>p .

Ben de bu durumda yardımcı olacaktır Esc jj imapped . Esc , vim'de ne kadar önemli olduğu için ana sıradan çok uzakta.

Diğer çözümlerden daha kısa değil, ama bazılarından daha az tıknaz olduğunu düşünüyorum ve başka kullanımları da var.


5

Bir çizginin tamamını kopyalayıp ardından bir çizginin tamamını yapıştırıyorsanız Y, çizgiyi veya çizgileri (satır sonu dahil olmak üzere) ilk etapta pyapıştırmak ve yapıştırmak için kullanın. VGörsel çizgi modu olan düzü v, görsel mod için düz ile de kullanabilirsiniz .


3
Sorun şu ki, bazen tüm satırı kopyalamak istemezsiniz ... On satır veya iki kelime kopyalasam da işe yarayan bir çözüm istiyorum.
static_rtti

3

Haritam var inoremap jj <ESC>. Bu yüzden birlikte yeni bir satır eklemek kolaydır ojjve Ojjdaha sonra p.

bu yüzden ojjpyeni bir satırsonu yapıştırın. o zaman bir vuruş daha var o<esc>pama ojjpbenim için kolay.


2

Bunun için zarif bir çözüm buldum. Yank kaydını işletim sisteminizin panosuna (yine de harika) koyuyorsanız,

set clipboard+=unnamed

yapabileceğinizden daha fazla o<Ctl-v>.

Daha az kontur olmanın yanı sıra, bu her ikisinde de gelişir o<Esc>pve :pugirintiyi koruduğu için: diğer seçeneklerin her ikisi de yeni satırda sıfır karakterinde başlar.

Uyarı, bunun işletim sistemine bağlı olabileceği veya olmayabileceğidir. Tek bildiğim, OS X'in son sürümünde çalıştığı, ancak pano OS panosunda yank almanın birçok yolundan sadece biri.



1

Neovim yapılandırmamda aşağıdaki eşlemeyi kullanıyorum:

nnoremap <leader>p m`o<ESC>p``
nnoremap <leader>P m`O<ESC>p``

Biraz açıklama:

  • m`: geçerli imleç konumunda bir işaret ayarlamanızı sağlar.
  • o<Esc>p: aşağıdan yeni bir satır oluşturun ve metni bu satıra yapıştırın
  • O<Esc>P: yukarıda yeni bir satır oluşturun ve metni bu satıra yapıştırın
  • ``: imleci orijinal konumuna getir

:h markVim'deki işaretler hakkında daha fazla bilgi için bkz .


1

Ekleme modunda kalmak istiyorsanız, o ctrl+o p

  • o - ekleme modu ve yeni satıra gitme
  • ctrl+o - normal modda olduğu gibi tek bir komut çalıştırın
  • p - yapıştırmak

Üç tuş vuruşu var ama ekleme modunda kalıyorsunuz ve aynı zamanda o ctrl+ooldukça hızlı, bu yüzden kişisel olarak 2,5 tuş vuruşu olarak davranıyorum.


0

Bu çözüm, yalnızca kopyalanan metin bloğu yeni bir satırda başladığında (satırın herhangi bir yerinde bir metin snippet'i almak yerine) geçerli gibi görünür, ancak kopyanızı her zaman almak istediğiniz son karakterde başlatabilir, ardından gezinebilirsiniz. istediğiniz kopya bloğunun başlangıcından önce satır sonundaki son karaktere kadar. Sonra yapıştırmak istediğinizde, imleci metninizin altına yapıştırılmasını istediğiniz satırın sonuna getirin ve p tuşuna basın. Açıklamayı berbat etmediysem, bu aradığınız etkiyi sağlamalıdı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.