2016-02-03 15 views
7

Aradığınız şey, vim düzenlemesinin etkilenen alanlarını normal modda görsel olarak kısaca flaş yapmaktır. Biz //line to be deleted üzerinde dd yaparsanız Örneğin,Düzenleme için görsel flaş efekti var mı?

if (true) { 
    //line to be deleted 
} 

düzenlerken, bu etkilenen alanı, silmeden önce biz Vd kullanarak yapabilirsiniz aynı parladı edilmelidir. Baktığımız şey, dd kullanarak Vd'unkiyle aynı etkidir. Bu, c, y vb. Tüm düzenleme işlemlerinde çalışmalıdır.

Tek bir satır için sınamak için şans vermek üzere nnoremap dd Vd ile eşlemeyi denedik. Tabii ki, bu şekilde haritalanmalıyız.

Google arama, hiçbir şey tatmin edici görünmüyordu. Orada bilinen herhangi bir eklenti var mı? Vim'e takılabilen herhangi bir kod da mükemmel olacaktır.

+0

Vd ile ilgili sorun nedir? – hek2mgl

+0

Ekstra tuştan başka bir şey yok. Her düzenleme komutu için her zaman v/V 'yazmak oldukça ağır olacaktır. – dlmeetei

+0

Demek istediğim y V ', nnoremap d V' vb. Nnoremap. Bunun gibi başka şeyler de bozulur. Eğer o diğer şeyleri kullanmıyorsanız, sizin için çalışmalıdır – hek2mgl

cevap

5

Verdiğim örneklerde ince ayar yapabileceğiniz pek çok şey var, ancak sorununuzu çözmek için iyi bir başlangıç ​​olabilir.

Bir fonksiyonun yürütülmesi sırasında bir an için seçim yapmak için :redraw ve :sleep tuşlarını kullanabilirsiniz.

nmap <silent> dd :call Com_dd()<cr> 

function! Com_dd() range 
    " Enter visual mode: 
    normal! V 

    " Select multiple lines, when there's a range: 
    let morelines = a:lastline - a:firstline 
    if morelines != 0 
     exe "normal! ".morelines."j" 
    endif 

    " Redraw the screen so we can see the selection: 
    redraw 

    " Sleeps 200ms: 
    sleep 200 m 

    " Delete the selected lines: 
    normal! d 
endf 

Bu örneğin, bir dizi ile çağrılabilir:: 3dd İşte

dd ile bir örnektir.

hareketleri ile komutlar için

, biraz daha zor, ama yakın istenen davranışa alabilirsiniz burada c komut için bir örnektir:

nmap <silent> c :set opfunc=Com_c<cr>[email protected] 

function! Com_c(type) 
    let curpos = getpos('.') 

    if a:0 " Invoked from Visual mode, use gv command. 
     silent exe "normal! gv" 
    elseif a:type == 'line' 
     silent exe "normal! '[V']" 
    else 
     silent exe "normal! `[v`]" 
    endif 

    redraw 

    sleep 200 m 

    normal! d 
    startinsert 
    call setpos('.', curpos) 
endf 

Bu son örnek aralıkları işlemez 3cw çalışmayacak (c3w çalışacaktır). Bir operatörün eşlenmesiyle ilgili yardım için :h [email protected] numaralı telefona bakın.

.

Ancak bazı yeni sorunlara yol açar: . artık bu komutlarla çalışmaz. Başka bir örnek: standart cw komutu, sözcükten sonra herhangi bir alanı silmez, ancak benim örneğim var.

Bu yeni sorunlar hakkında bazı çözümler bulabilirsiniz, ancak şu anda hiç yok.

+0

Teşekkür @yolenoyer. Değerlendirecek ve size geri dönecek – dlmeetei

İlgili konular