検索時に発音区別符号/アクセントを無視するようにVimに指示する方法はありますか?たとえば、検索できるようにしたい
kočička
入って
/kocicka
ignorecaseおよびsmartcaseオプションは非常に便利ですが、発音区別符号/アクセントとは何かを持っていないようです。
検索時に発音区別符号/アクセントを無視するようにVimに指示する方法はありますか?たとえば、検索できるようにしたい
kočička
入って
/kocicka
ignorecaseおよびsmartcaseオプションは非常に便利ですが、発音区別符号/アクセントとは何かを持っていないようです。
回答:
コメントで@muruが言及したように、:help /[[類似クラスのセットとして評価される文字クラス式であると思われる等価クラス(で説明)を使用できます(つまり、アクセント記号や発音区別符号を削除すると同じになります)。
たとえば、同じパターンを検索するkočičkaにkocickaは、これを使用できます。
ko[[=c=]]i[[=c=]]ka
where [[=c=]]は、cキャラクターの等価クラスです。
c検索の実行中にヒットするたびにこの文字クラスを自動的に挿入するには、次のマッピングを使用できます。
cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'
次のように分類できます。
<expr> 式の評価を入力しますgetcmdtype() =~ '[?/]' 後方検索と前方検索のどちらを書いているかをテストします'[[=c=]]'c前のテストが成功した場合、キャラクターの等価クラスを返します'c'cそうでなければ文字を返します前のマッピングには2つの欠点があります。
cキャラクターのみをカバーします次の<CR>ように再マッピングすることで改善できます。
cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>
<CR>検索用のパターンを記述した後にヒットすると、マッピングにより、すべてのアルファベット文字が同等の同等クラスに自動的に置き換えられます。
のマッピング<CR>は前のマッピングと似てcいます<expr>が、システムマッピングではなく引数を使用します<C-\>e。
<expr>式の評価を挿入でき、<C-\>eコマンドライン全体を式の評価に置き換えることができます。
/kočičkaマッチはkocicka、あなたが使用することができます'[[:lower:][:upper:]]'代わりに'\a'。代替案'[:alpha:]'と'\I'マルチバイト文字で動作するようには思えません。ただし、動作して'[^[:punct:]]'いるように見えますが(確信はありませんが)、独自の等価クラス(例:)も構築すると思います'[А-яЁё]'。
:h [[=および:h patterns-composing。