2017-03-16

Emacs-Lisp 関数 skip-chars-forward で文字スキップ

Emacs で空白・改行をスキップしてカーソルを動かしたいと思った。正規表現を使って re-search-forward を使う方法もあるけど、そこまで検索とかしたいわけじゃない。もう少し軽めの関数で十分。というわけで、skip-chars-forward を使った。

関数の説明は次の通り:

Move point forward, stopping before a char not in STRING, or at pos LIM. STRING is like the inside of a ‘[...]’ in a regular expression except that ‘]’ is never special and ‘\’ quotes ‘^’, ‘-’ or ‘\’ (but not at the end of a range; quoting is never needed there). Thus, with arg "a-zA-Z", this skips letters stopping before first nonletter. With arg "^a-zA-Z", skips nonletters stopping before first letter. Char classes, e.g. ‘[:alpha:]’, are supported.

Returns the distance traveled, either zero or positive.

引数にはスキップした文字を渡す。複数の文字をスキップしたい場合は、正規表現 [...] の中の文字列 (... の部分) だけを渡す。

例えば a, b, c の 3 つの文字をスキップしたい場合は次のように書く。

(skip-chars-forward "abc")

- (ハイフン) を使うこともできる。

(skip-chars-forward "a-c")

a, b, c 以外の文字をスキップしたい場合は、否定として ^ が使える:

(skip-chars-forward "^abc")

POSIX の文字クラスも利用可能。今回は空白・改行をスキップしたい。空白・改行を現す文字クラスは [:space:]。これを使ってみる:

(skip-chars-forward "[:space:]")

すると改行はスキップされなかった。

アレ? なんでかな。

とりあえず、次のようなコードを書いたけど気持ち悪い:

(skip-chars-forward "[:space:]\n\r")

誰か理由を知ってる人がいたら、コメントください。

No comments:

Post a Comment