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
BadJob
ve onun yerine koymak GoodJob
istersem, kullanamam %S/badjob/goodjob/g
. Bir eşleşme algılanamıyor.
%S/BadJob/GoodJob/g
Subvert 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. Bad
ile ikame edilecektir GOOD
yerine Good
. 3. job
Sorunun " " 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.
/\ze
pozitif bir ileriye doğru işaretlemek için vim regex sözdizimsel şekerdir: Sonraki model \ze
kontrol 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
?
:SmartCase
Komutu kullanabilirsiniz . Bunu kendi çatalımda uzattım . Bunun bir bağımlılık olarak ingo kütüphanesi gerektirdiğini unutmayın .