Can bu Vim yapılabilir?
Ne demek istiyorum: 'BadJob' aramak ve 'GoodJob' ile değiştirmek aşağıdaki yedekleri yapar
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
Can bu Vim yapılabilir?
Ne demek istiyorum: 'BadJob' aramak ve 'GoodJob' ile değiştirmek aşağıdaki yedekleri yapar
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
Yanıtlar:
Abolish.vim kullanın :
:%S/badjob/goodjob/g
BadJobve onun yerine koymak GoodJobistersem, kullanamam %S/badjob/goodjob/g. Bir eşleşme algılanamıyor.
%S/BadJob/GoodJob/gSubvert komutu karışık durum moduna geçecek ve OP tarafından verilen tüm alt bölümleri gerçekleştirecektir.
Bu aradığınız bir çözüm olup olmadığını bilmiyorum ... ama bunu kullandım: keepcase.vim
Vim'de başka türlü destek yok ...
elbette yapabilirsin
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
ps. tahmin ediyorum keepcase.vim bazı benzer mantık kapsüller :)
:set ignorecase. 2. Badile ikame edilecektir GOODyerine Good. 3. jobSorunun " " kısmı yok sayılır, bu nedenle bunun yerine de lambada→ geçecektir lamgooda. Düzeltmeler ve benim de bu böcek ve birkaç başka şeyler için açıklamalar cevap . (Ayrıca LOLOWLs!)
Bunu yapıştırabilir ve uyarlayabilirsiniz:
(Tabii ki, bunu zaman zaman yaparsanız, bu canavarlık yerine bir eklenti isteyeceksiniz.Ama acelesi olan ve sadece bir kez ihtiyaç duyanlar için bu hızlı bir hack'tir. yapıştırma zevkiniz için :)
:%s/\cbad\zejob/\= ( submatch(0)[0] is# toupper(submatch(0)[0]) ? 'G' : 'g' ) . ( submatch(0)[1] is# toupper(submatch(0)[1]) ? 'OOD' : 'ood' )
Arama modelinden ayrı olarak, değiştirme kodundaki dört 'dizeyi düzenlemeniz gerekir ': Parçaları kalın harflerle düzenleyin :
:% s / \ c bad \ ze job / \ =
(submatch (0) [0] # daha büyük (submatch (0) [0])? ' G ': ' g ').
(submatch (0) [1] # daha büyüktür (submatch (0) [1])? ' OOD ': ' ood ')
Yapıştırma için bu 'turuncu' sürümü kullanmayın, çünkü linebreak karakterleri de komutu kıracaktır.
/\zepozitif bir ileriye doğru işaretlemek için vim regex sözdizimsel şekerdir: Sonraki model \zekontrol edilir, ancak ikame edilmez.
is#?? Açıklayayım… (İlgileniyorsa.)
#(ayrıca ==#ve diğerlerinde ) büyük / küçük harfe duyarlılığı uygular. Aksi takdirde, :set ignorecase(kullanacağım, çünkü bu yararlı için gereklidir :set smartcase), vim dikkate alacaktır 'a' == 'A'!

Çılgın olduğu gibi, bunu gerçekten hesaba ==katmalıyız : Kullanıcı ayarlarına bağlı olduğu için NEVAR kullanılmalıdır! (Bunun tam olarak nerede olmasını istediğiniz hariç.) ==#Tamsayıları karşılaştırırken kullanma önerisini bile takip edeceğim : http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
is#yerine ==#savunmacı bir şekilde kodlamanın başka bir yoludur: Tür güvenliğini artırır: http://google.github.io/styleguide/vimscriptguide.xml?showone=Type_checking#Type_checking
Bir dizgi değişmeziyle karşılaştırılırken kullanılmalıdır.
'single-quoted'"double quoted" dizeler yerine başka bir iyi uygulama: http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings
HT @ fc. - Bu cevap, birkaç eksiklik gidererek onların cevabı üzerine kuruludur .
Keepcase eklentisine bir alternatif , SmartCase'dir - orijinal durumu korurken sözcükleri değiştirmek . (Kötü reytinglerden vazgeçmenize izin vermeyin.)
:%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig?
:SmartCaseKomutu kullanabilirsiniz . Bunu kendi çatalımda uzattım . Bunun bir bağımlılık olarak ingo kütüphanesi gerektirdiğini unutmayın .