2011-01-04 14 views
9

Inn ~/script.vim, ben:Vim'de bir ifadeden bir dizin ekleyerek runtimepath'ı ayarlayın.

set runtimepath+=string(substitute(expand("%:p"), 'script\.vim', '', 'g')) 

ben .bashrc bir takma adı var: amaçlandığı gibi

alias vimscript="vim -S ~/script.vim" 

string(substitute(expand("%:p"), 'script\.vim', '', 'g')) eser yayınlanıyor.

Sorun, ayarlanmış runtimepath ifadesinde kullanıldığında, script.vim numaralı telefonu arayarak vimscript numaralı telefonu aradığımda çalışmaz. Vimscript tarafından runtimepathı kontrol etmek için çağrıldıktan sonra vim içine set rtp çalıştırdığımda, istenen ek dizisi gösterilmiyor (ancak diğerleri var).

cevap

16

Ben @Laurence için bazı eklemeler Gonsalves cevap:

  1. İşte var muhtemelen ,/some/path gerekirken, bu yüzden, .=

    let foo=foo.bar 
    

    let &runtimepath.=','.string(path) 
    

    ,'/some/path' runtimepath & için ekler Kod

    let foo.=bar 
    
  2. olarak yazılabilir: Ayrıca operatörü «concat ve atamak» .

  3. Komut dosyanızın yolunu runtimepath'a eklemek istediğinizi tahmin ediyorum. Bu doğru ise, o zaman kodu (geçerli tamponu içinde Senaryonu düzenlerken varsayarak) geçerli düzenleme oturumdaki

    let &runtimepath.=','.escape(expand('<sfile>:p:h'), '\,') 
    
    bir komut dosyası içine

    veya

    let &runtimepath.=','.escape(expand('%:p:h'), '\,') 
    

    olarak yazılmalıdır.

+0

yaklaşımınızı daha iyi IMO, genişletilmiş parametreleri kullanmak mümkün olduğunda yerine kullanarak gerçekten çirkin oldu. Teşekkürler. –

2

set komutunun sağ tarafı bir ifade değil, bir harf dizesidir.

let seçeneklerini kullanarak ve & numaralı seçenek adına önek seçeneklerini kullanarak seçenekleri (set kümelerini) değiştirebilirsiniz. örneğin:

let &runtimepath=substitute(expand("%:p"), 'script\.vim', '', 'g') 

gibi bir şey yapabilirsiniz let ile runtimepath için eklemek için: (. . dize birleştirme operatörüdür)

let &runtimepath=&runtimepath . ',' . substitute(expand("%:p"), 'script\.vim', '', 'g') 

+0

Tüm bu kavramları anlamak için tüm vim belgelerini ve bazı kitapları okumam gerektiğini düşünüyorum. Ikinci seçeneği denedim, ancak hala çalışmıyor: şimdi, yerine dize (yerine (Ben 'set' rtp çalıştırdığınızda var ') Ne eksik? –

+0

@Somebody Dize() dahil ettiğiniz ifade Olmaması gereken(Sadece sizin ifadenizi doğru modele kopyaladım.) İfadenin düzeltilmiş biçimini kullanmak için cevabı güncelledim. ZyX'in yaptığı gibi muhtemelen daha da basitleştirilebilirdi, ama bu sizi en azından doğru yolda bulmalı. –

+0

@Somebody BTW, Hiç bir vim kitap okumadım. vim in: help help aslında oldukça iyi, ama bir sürü lot ve kraker var. Vim'i on yıldan fazla bir süredir kullanıyorum ve bunun hakkında düzenli olarak yeni şeyler öğreniyorum. –

İlgili konular