2010-07-23 18 views
10

VIM'in kısaltmadan sonra genişletmenin imleci yerleştirmesini söylemenin bir yolu var mı? Eğer .gvimrcVIM kısaltması içindeki imleç konumu

iabberv <? <?=|?> 

böyle bir şey olduğunu varsayalım ve boru karakteri otomatik olarak nerede imleci istiyorum. Ben bu durumda kullanmak istiyorum

cevap

10

hızlı bir çözüm kısaltması için bazı tuşa basma eklemektir:

iabbrev <? <?=?><Left><Left> 

= sonra imleci sola iki yerde, koyun misiniz.

Bu şekilde, böyle <End>, <Home> gibi çeşitli hareket tuşlarını kullanabilirsiniz, hatta <Esc> normal moduna dönmek ve her zamanki normal mod komutlar. Örnek daha sonra

olacaktır ve ilk örnekle aynıdır. Uzayla bir kısaltmayı genişletirseniz, bir boşluk daha olacaktır. adresinden, <BS> (backspace) kısaltması ile kurtulabilirsiniz. Veya boşluk bırakmayacak olan <C-]> ile genişletin.

Düzeltme: Bu en iyi .vimrc konur

func Eatchar(pat) 
    let c = nr2char(getchar(0))  
    return (c =~ a:pat) ? '' : c  
endfunc 

: kısaltma ilk genişletilmiş olduğundan, ve uzay takılı bundan sonra sen yardım (map.txt) bulunan küçük bir işlev gerekir. Şimdi aşağıdaki kısaltma intented olarak tamamen çalışır:

:iabbrev <silent> <? <?=?><Left><Left><C-R>=Eatchar('\s')<CR> 

Biraz dağınık, ama beyaz boşluk kaldırır harici işlev çağrısı vardır ve iyi çalışması gerekir.

+0

Ben iabbrev hha denedik ama "=" karakterini :) Ben yerleştirmek gerekir siler? Bu tam olarak istediğim, bu sorunu dışında. – ivan73

+0

Yanıtlamadan önce '' işlevini sınamak için üzgünüz. Uygun bir geçici çözümde düzenledim. – progo

+0

Serin, bu cevabı :) ben böyle kullanıyorum kabul ederek çalışır: 'iabbrev hha = Eatchar ('\ s') ' – ivan73

0

O lh-map-tools ile yapılabilir:

" 
" in {rtp}/ftpluvin/vim/vim_snippets.vim 
inoreab <buffer> <silent> if  
     \ <C-R>=InsertSeq('if', 'if!cursorhere!\nendif!mark!')<CR> 

Diğer eklentileri benzer bir özellik sunmaktadır.

4

Ne istiyorsun parçacıklar. Bunun için snipmate kullanıyorum.

+0

Oy kadar ipucu için teşekkürler Daenyth – ivan73

+0

Sen bir göz atmalısınız [UltiSnips] (https://github.com/SirVer/ultisnips), sadece harika! – aymericbeaumet