2013-02-13 7 views
5

ve sonradan blok yapıştırarak imleç tarafından verilen istenen sütun sonra yapıştırın ama macunlar,. Blok için yer açmak için gerekli satırları oluştururken nasıl blok yapıştırılır? Mevcut ve aşağıdaki hatların içeriği üzerine yerinde VIM, Görsel modda metin bloğu yanking olarak

Bazen bu istemiyorum, istediğim imleç pozisyonuna tarafından verilen girinti ile bir blok yapıştırmak için, ancak metin üzerine yazmadan, yeni bir boş çizgiler içinde yapıştırarak.

Bunu yapmanın bir yolu var mı?

(... çok zeki değil) Şu anda, bunu başarmak için, ben boş çizgilerin iyi bir miktar oluşturmak ve sonra sonra geriye kalan boş çizgilerin yok, blok yapıştırın.

Not: I set virtualedit=all kullanımı söz konusu boş hatlar içinde herhangi bir sütunda yapıştırmak için.

+0

Sadece senden hoşlanıyorum. Vimscript'e başvurmadan istediğin şeyi (muhtemelen hepimiz) yapmak için bir yol olduğunu düşünmüyorum. Vim.org'da arama yaptın mı? – romainl

+0

@romainl, yapmadım. Sanırım kabul edilen cevap haritasına sadık kalacağım. –

cevap

4

Aşağıdaki gibi bir şey deneyebilirsiniz. Blok-bilge bir şey yap, imleci konumlandır ve lid anahtarın ne olursa olsun <Leader>p.

function! FancyPaste() 
    let paste = split(@", '\n') 
    let spaces = repeat(' ', col('.')-1) 
    call map(paste, 'spaces . v:val') 
    call append(line('.'), paste) 
endfunction 

nnoremap <Leader>p :call FancyPaste()<CR> 

Sen elbette istediğiniz her şeyi olduğu eşleme değiştirebilir; bu sadece bir öneri.

Güncelleme

: İşte bir argüman kabul eden bir versiyonu. Bu size örn. bunun yerine sistem panosundan yapıştırın. Ayrıca 'virtualedit' olası kullanımı için dikkate alınması için virtcol() yerine col() kullanır:

function! FancyPaste(reg) 
    let paste = split(getreg(a:reg), '\n') 
    let spaces = repeat(' ', virtcol('.')-1) 
    call map(paste, 'spaces . v:val') 
    call append(line('.'), paste) 
endfunction 

nnoremap <Leader>p :call FancyPaste('"')<CR> 
nnoremap <Leader>cp :call FancyPaste('+')<CR> 

boşluk değil, sekmeler ile akılda istendiğinde sadece girinti tutun. Uygun miktarda sekme (ve gerekirse boşluklar) ile girilmesi, bazı ekstra kod satırları gerektirecektir, ancak oldukça yapılabilir.

0

Doğru istediğini anlamak, eski komutuna dayanarak bu deneyebilirsiniz ve = operatörü:

nmap <leader>p :put "<cr>'[='] 

başka olasılık:

nmap <leader>p :let @"[email protected]"<cr>]p 

@"[email protected]" yapmak gibi görünüyor Vim unutmak Kopyalanan satırlar hakkında, karakter açısından ve ]p pastaları yeniden girildi.

UnconditionalPaste eklenti ayrıca böyle yapıştırmak yardımcı olabilir.

+0

Kabul edilen yanıt, beklediğim davranışları tam olarak üretir. ': sadece koymak yok, çünkü imleç pozisyonuna göre girintili beyaz boşluk üretmeyi göz ardı ediyor. –

+0

Tamamen haklısın, bunu tamamen unuttum. Ben yeniden = '' reindent ekledim, şimdi kullanım durumunuz için çalışması gerektiğine inanıyorum. –

+0

Hayır, değil, çünkü metinle uğraşıyorum, kod değil. Yani akıllı girinti yok, sadece imleç konumuna göre beyaz aralıklı olması gerekiyor. –

İlgili konular