Re: Bir Vim Sorusu
* Recai Oktaş [2006-04-21 21:09:45+0300]
> Tabii yapabilirsiniz. VIM'de <c-o> tuşu var (bk. ":h i_CTRL-O"), "ekleme"
> (veya sizin çevirinizle "yazım") kipinden çıkmadan bir "normal" kip
> komutunu çalıştırmanız mümkün. Aşağıdaki eşlemleri deneyin:
>
> inoremap <c-h> <c-o>w
> inoremap <c-h> <c-o>b
>
> Ama yukarıdaki bu yöntemin şık olmayan tarafları var: her şey tekrar tekrar
> elle yapılıyor ve eşlemlerde tutarsızlık olabiliyor. Bu işi makineye
> yaptırmakta yarar var. :-) Ufak bir VIM işlevi yazdım aşağıda, bu
> satırları ~/.vimrc dosyasına koyarsanız işler daha doğru yapılmış olur.
> Üstün körü denedim, doğru çalışıyor gibi. Sorun olursa yazarsanız.
[...]
Önceki işlev biraz "verbose" idi ve yapmaya giriştiği uyanıklığı da yarım
bırakıyordu. En sık karşılaşılan "her kip" durumuna göre eniyileştirilmiş
aşağıdaki işlev herhangi bir uyanıklık da yapmıyor, yani daha temiz.
---------------------------------->8---------------------------------------
" XXX: Hata denetimi yok; sadece tek karakterlik, basit tuşlar için uygun.
" Örnek: DOĞRU normal/visual: <f>, insert: <c-f> => </>
" :RemapOnce f /
" YANLIŞ sol taraf basit (ve anlamlı) değil (<c-x>)
" :RemapOnce <c-x> /
com! -nargs=+ RemapOnce call s:remap(<f-args>)
fun! s:remap(lmap, rmap, ...)
exe
\ 'noremap ' . a:lmap . ' ' . a:rmap . '|' .
\ 'inoremap <c-' . a:lmap . '> <c-o>' . a:rmap . '|' .
\ 'vnoremap ' . a:lmap . ' ' . a:rmap . '|' .
\ ''
" Üst satır silme/ekleme kolay olsun diye var.
if a:0 > 0
" İstisna idaresi yapalım; şık değil ama daha kestirme.
if a:1 !~ '[n]' | exe 'nunmap ' . a:lmap | endif
if a:1 !~ '[i]' | exe 'iunmap <c-' . a:lmap . '>' | endif
if a:1 !~ '[v]' | exe 'vunmap ' . a:lmap | endif
" Yukarıda bir düzenleme varsa burayı da unutmayalım.
endif
endfun
---------------------------------->8---------------------------------------
F klavyeli VIM'ciler için düşündüğünüz bu değişiklikler ilgimi çekti. El
altında bulunsun böyle bir şey, yarın bir gün bakarsınız F'e geçeriz. ;-)
"insert" kipinde Ctrl- yerine başka bir şey kullanmak isterseniz (meselâ
Windows® tuşu) ' *map <c-' kısmıyla oynamanız gerekecek. Benim klavyemde
bu tuş yok, deneyemedim. Fakat zor olmasa gerek.
--
roktas
Reply to: