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")
誰か理由を知ってる人がいたら、コメントください。