Vim'e arama yaparken aksanları / aksanları göz ardı etmek istediğimi söylemenin bir yolu var mı? Örneğin,
kočička
Girerek
/kocicka
ignorecase
Ve smartcase
seçenekler çok faydalıdır, ancak diacritics / desenli ilgisi var görünmemektedir.
Vim'e arama yaparken aksanları / aksanları göz ardı etmek istediğimi söylemenin bir yolu var mı? Örneğin,
kočička
Girerek
/kocicka
ignorecase
Ve smartcase
seçenekler çok faydalıdır, ancak diacritics / desenli ilgisi var görünmemektedir.
Yanıtlar:
@Muru de belirtildiği gibi açıklama , siz (açıklanan bir denklik sınıfını kullanabilirsiniz :help /[[
benzer bir karakter kümesi olarak değerlendirilen bir karakter sınıfı ifadesi gibi görünüyor) (yani herhangi bir vurgu / aksan kaldırmak kez aynıdır).
Örneğin, aramaya kočička
ve kocicka
aynı desen, bu kullanabilirsiniz:
ko[[=c=]]i[[=c=]]ka
karakter [[=c=]]
için eşdeğerlik sınıfı nerede c
.
c
Bir arama yaparken vurduğunuzda bu karakter sınıfını otomatik olarak eklemek için bu eşlemeyi kullanabilirsiniz:
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
ki şu şekilde parçalanabilir:
<expr>
bir ifadenin değerlendirmesini yazıngetcmdtype() =~ '[?/]'
geriye veya ileriye doğru arama yazıp yazmadığınızı test edin'[[=c=]]'
c
önceki test başarılı olursa karakter için eşdeğerlik sınıfını döndürür'c'
c
karakteri başka türlü döndürmekÖnceki eşlemenin 2 dezavantajı vardır:
c
karakteri kaplarBu şekilde yeniden eşlenerek geliştirilebilir <CR>
:
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
Bir <CR>
arama için bir desen yazdıktan sonra vurduğunuzda , eşleme tüm alfabetik karakterleri eşdeğerlik sınıfı karşılıklarına göre otomatik olarak değiştirir.
İçin eşleme , bağımsız değişkeni değil sistem eşlemesini kullanması dışında <CR>
önceki eşlemesine benzer . bir ifadenin değerlendirmesini eklemenizi sağlarken , tüm komut satırını bir ifadenin değerlendirmesiyle değiştirmenizi sağlar.c
<expr>
<C-\>e
<expr>
<C-\>e
/kočička
eşleşmeler yerine, kocicka
kullanabilirsiniz . Alternatifler ve çok baytlı karakterlerle çalışmıyor gibi görünüyor; Ancak, (daha az emin olmama rağmen) işe yarıyor gibi görünüyor, ve kendi eşdeğerlik sınıfı (örneğin, ) de inşa sanırım . '[[:lower:][:upper:]]'
'\a'
'[:alpha:]'
'\I'
'[^[:punct:]]'
'[А-яЁё]'
:h [[=
ve:h patterns-composing
.