Arama yaparken aksanları / aksanları yoksaymak


12

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

ignorecaseVe smartcaseseçenekler çok faydalıdır, ancak diacritics / desenli ilgisi var görünmemektedir.


Yanıtlar:


16

@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čkave kocickaaynı desen, bu kullanabilirsiniz:

ko[[=c=]]i[[=c=]]ka

karakter [[=c=]]için eşdeğerlik sınıfı nerede c.


cBir 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ın
  • getcmdtype() =~ '[?/]' 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'ckarakteri başka türlü döndürmek

Önceki eşlemenin 2 dezavantajı vardır:

  1. sadece ckarakteri kaplar
  2. deseni okumayı zorlaştırabilir

Bu ş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


1
Ayrıca, ters yönde gitmek isterseniz, örneğin /kočičkaeşleşmeler yerine, kocickakullanabilirsiniz . 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:]]''[А-яЁё]'
kevinlawler

Keşke bunun için bir ayar olsaydı. [[= C =]] kullanırken işe yarar ama mistype 7 kez geri tıklamanız gerektiği anlamına gelir. Ayrıca okunabilirlik de acı çekiyor.
daliusd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.