readlineの単語セパレータとは何ですか?


9

Bashで「単語」を削除する_と、やなどの特定の文字で停止し/ます。たとえば、

/foo/bar

そしてアクティブ化backward-kill-word(通常Alt- Backspaceおよび/またはCtrl-にマッピングされwます)、残りのテキストは

/foo/

。これがないではないと対応$COMP_WORDBREAKSまたはreadlineさんrl_completer_word_break_characters。単語の区切りを決定するためにどの文字が使用されているか(おそらくオーバーライドされる可能性があるため、コードのデフォルトではなく、実行中のシステムで)どうすれば検出できますか?

回答:


9

bashのドキュメントには次のように記載されています。

backward-kill-word (M-Rubout)

ポイントの後ろの単語を殺します。単語の境界は、backward-wordで使用されるものと同じです。

そして

backward-word (M-b)

現在または前の単語の先頭に戻ります。単語は英数字(文字と数字)で構成されています。

backward-wordBash 4.2での処理は、バンドルされたlibreadlineコード(text.c:rl_backward_word)で行われます。ブレークという単語はに基づいておりrl_alphabetic、それ自体がisalnum関数に依存しています。これはロケールに依存しますが、bashで直接構成することはできません。

Bash 4.0では、shell-forward-wordand shell-backward-wordアクション(および同等のkill)で別の「単語」タイプが導入されたことに注意してください。これらは、メインのbashコード()で処理されるシェルのメタ文字(()<>;&|")と空白(おそらくを介してロケールに依存isblank)でのみ壊れますbashline.c


1
良い参考文献ですが、それはあいまいです。彼らが意味するか[^A-Za-z0-9][^[:alnum:]](ローカライズ依存)、または他の何か?
l0b0 2013年

厳密に言うと、ロケール(alnum文字クラス)で構成できますが、他のアプリケーションにも影響します。
ステファンChazelas

わかりました、コードの間違った場所を見ていました(shell-backward-*)...分割はに基づいているisalnumため、実際にはロケール依存であり、2番目のバージョン@ l0b0と同等です。
マット

1
@Stephane Chazelas:bashオプションで構成できないことを意味し、そのビットを言い換えました。
マット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.