2013-04-07 27 views
18

olarak ayarlanıp ayarlanmadığını kontrol etmenin şık yolu Son yıllarda, uzak sunuculardaki yapılandırma ve komut dosyalarını düzenlemek için vim kullanıyorum. Birkaç hafta önce bir sonraki adımı atmaya karar verdim ve Sublime Text 2'nin yanı sıra (Mac) vim'i kullanmaya çalıştım. Şimdi ilk eklentimi oluşturmak istediğim bir noktaya geldim. Eklentimin belirli özelliklerini ayarlamak için bir kullanıcı tarafından atanabilecek ~ 16 genel değişken tanımlayacaktır. Bir kullanıcının kendi değerini belirli bir değişkene zaten tahsis edip etmediğini kontrol etmek için kendime en zarif yolun (öznel olarak) ne olacağını sordum. Ben diğer çeşitli eklentileri ve "desen" teftiş şimdiye kadar hep gibi görünüyor bkz:Genel bir eklenti değişkeni bir vim eklentisi

if !exists("g:pluginname_setting") 
    let g:pluginname_setting="default" 
endif 

yalındır kolay ve gibi görünüyor Yani. Ama yine de aynı kodu tekrar tekrar tekrar tekrarlardım. Vi (m) oldukça uzun bir süre için var olduğundan eminim ki insanlar eklentileri yazmanın birçok yolunu denediler ve yukarıda verdiğim "desen" olduğunu düşündüğüm bir tür "en iyi uygulama" geliştirdiler. Örnek olarak. Bununla birlikte, tüm eklenti ayarlarını içeren bir sözlüğü doldurmak için bir işlevi çağırmak ve ardından bir kullanıcının kişisel tercihlerini önceden tanımlayıp tanımlamadığını kontrol etmek için sözlük üzerinde yineleme yapmak daha zarif olmaz mıydı? Bu iyi bir fikir mi yoksa fikrini bırakıp ìf !exists() yaklaşımına sadık mıyım?

cevap

15

if exists(...) gerçekten de standart yapılandırma deyimidir ve gidilecek yoldur. Tabii ki, çoğaltmayı azaltmak için biraz meta programlama yapabilirsiniz (function! s:SetDefault(varname, default) gibi); bazı eklentiler bunu yapar.

Diğer yandan, eklentiniz çok karmaşık bir sorunla (bir metin editöründe ?!) ilgilenmedikçe, büyük ölçüde özelleştirmeye izin vermeniz iyi bir şeydir, 16 yapılandırma değişkeni gerçekten de son noktadır. Tüm bunları belgeleme ve çeşitli kombinasyonları test etme çabasını göz önünde bulundurmalısınız; belki önce daha basit azaltılmış bir yaklaşımla başlamak ve kullanıcı geri bildirimlerine dayanarak evrilmek daha iyidir.

let g:pluginname_setting = get(g:, 'pluginname_setting', "default") 

şaşırıyorum bu yaygın Eklenti ayarlarında kullanılmaz:

+0

Cevabınız için teşekkür ederiz. :) Eklenti bazı olayları ele alacaktır. Mevcut varyasyonların 2/3'ü, farklı durumlarda renkler, fg veya bg kullanımı gibi görsel görünümlerle ilgilidir. – Saucier

+0

Vurgulamalar için, olağan yaklaşım: 'def def pluginGroup guifg = ...' varsayılan vurgulamadır; Bu daha sonra .vimrc'de geçersiz kılınabilir. –

+0

Mevcut hi gruplarının renklerini geçersiz kılsam bile mi? – Saucier

24

zarif bir yolu yoktur.

+0

Bunun nedeni, get() işlevinin üçüncü argümanının nispeten geç eklenmesidir. Yaklaşık 7.3.something ve birçok eklentileri çok eskidir –

+0

İlk düşündüğüm buydu ama 7.0 sürümüyle çalıştı ve çalıştı. –

+0

Hm, haklısınız gibi görünüyor. Farklı bir yama düşünmüş olmalıyım. –