Re: Bir Vim Sorusu
Merhaba,
* ahmet nurlu [2006-04-20 15:25:46-0700]
> Cevap icin tesekkurler. Simdi hersey istedigim gibi oldu.
>
> Acaba bazi komutlari yazim kipi(insert mode) icinde uygulamak mumkun mu?
> Mesela:
>
> imap <C-n> <up>
>
> komutu ile yazim kipinden(insert mode) ayrilmadan cumle cumle yukari
> dogru gidebiliyorum. Ayni isi yazim kipinden ayrilmadan cumle icinde
> kelime kelime geriye(veya ileri) dogru gitmek istesem nasil yapabilirim?
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.
----------------------------------->8--------------------------------------
" Seçilen kipler için (öntanımlı "hepsi") hedef tuş LMAP'a RMAP'taki
" normal kip işlevini atar. Örnekler:
"
" <n> tuşunu sadece "normal" ve "virtual" kipte
" normal <k> işlevine ata:
" RemapOnce n k nv
"
" <b> tuşunu (insert kipte <c-b> olarak) her üç
" kipte normal <j> işlevine ata:
" RemapOnce b j
"
" <f6> tuşunu her üç kipte normal </> işlevine ata
" (insert kipte de <f6>):
" RemapOnce <f7> /
fun! s:remap(lmap, rmap, ...)
" Bu işlev pek akıllı değildir...
let mode = (a:0 > 0) ? a:1 : 'a' " ama en azından kip seçebilir...
if mode =~ '[an]'
exe 'noremap ' . a:lmap . ' ' . a:rmap
endif
if mode =~ '[ai]' " ... veya insert kipte daha uyanık olabilir.
if a:lmap =~ '^[[:alnum:]]'
exe 'inoremap <c-' . a:lmap . '> <c-o>' . a:rmap
else
exe 'inoremap ' . a:lmap . ' <c-o>' . a:rmap
endif
endif
if mode =~ '[av]'
exe 'vnoremap ' . a:lmap . ' ' . a:rmap
endif
" Diğer kipler gerekirse buraya eklenir.
endfun
" Bunu komut olarak çağırmak daha pratik olur.
com! -nargs=+ RemapOnce call s:remap(<f-args>)
" F klavyedeki tuşları VIMleştirelim.
RemapOnce n k
RemapOnce b j
" RemapOnce l l
RemapOnce k h
RemapOnce h w
RemapOnce j b
----------------------------------->8--------------------------------------
--
roktas
Reply to: