Emacs のデフォルトの前方ワードと後方ワードを、より Visual Studio のように動作するように置き換えたいと考えています。これは、Perl プログラミングにより適していると思います。最初に構文テーブルをハッキングしようとしましたが、必要な効果は得られませんでした。それから私は次のことを思いついた:
(defconst perl-movement-stop-chars "a-zA-Z$@%_0-9'")
(defconst perl-movement-stop-pattern (concat "[" perl-movement-stop-chars "]"))
(defconst non-perl-movement-stop-pattern (concat "[^" perl-movement-stop-chars "]"))
(defun perl-forward-word ()
(interactive)
(if (looking-at perl-movement-stop-pattern)
(progn
(if (re-search-forward non-perl-movement-stop-pattern nil t)
(backward-char)))
(if (re-search-forward perl-movement-stop-pattern nil t)
(backward-char))))
(defun perl-backward-word ()
(interactive)
(backward-char)
(if (looking-at perl-movement-stop-pattern)
(progn
(if (re-search-backward non-perl-movement-stop-pattern nil t)
(forward-char)))
(if (re-search-backward perl-movement-stop-pattern nil t)
(forward-char))))
(add-hook 'cperl-mode-hook
(lambda()
(local-set-key [C-right] 'perl-forward-word)
(local-set-key [C-left] 'perl-backward-word)
linum-mode))
これは私が望むことです-ほぼ:バッファ内の最初の単語内から後方に移動するときは、まだケースを処理する必要があります。しかし、それは私の質問ではありません。
これに関する問題は、フックがインストールされていない (または他のモードである) 場合と同様に、CS-right と入力しても選択が開始されないことです。ただし、選択を開始すると (たとえば、最初の S 右を押すことによって)、私の関数はそれを拡張します。
私は elisp プログラミングについてほとんど知らないので、ここで自分のやり方を推測しているだけです。少し助けていただければ幸いです。ありがとう...