2

EMACS24.1。Ctrl-space次のようなカスタム関数に再バインドする必要があります。

  • 行末に移動
  • 末尾のスペースがある場合は削除します
  • マークを設定します(通常どおりCtrl-space

これは私のコードが機能していません:

(define-key global-map [?\C- ] 'my-set-mark-command)
(defun my-set-mark-command()
   (interactive)
   (end-of-line)
   (delete-char (* -1 (skip-chars-backward "\t\s")));;delete trailing spaces
   (set-mark-command nil))

末尾にスペースがない場合は正常に機能します。領域の選択と強調表示を開始します。末尾のスペースの場合:末尾のスペースを削除し、行末で停止し、[マーク]を設定しますが、領域を強調表示しません。

最後のコマンド(set-mark-command)を削除して手動M-xset-mark-commandで実行すると、機能します。この機能を正しく動作させるために誰かが私を助けてくれませんか?

4

2 に答える 2

5

変更コマンドによって変数deactivate-markがリセットされ、マークが失われます。ドキュメントには、変数を でsave-excursionバインドすることにより、その動作を無効にする方法が記載されています。その後、コードを次のように変更できます。deactivate-marklet

(defun my-set-mark-command ()
   (interactive)
   (end-of-line)
   (let (deactivate-mark)
     (delete-char (* -1 (skip-chars-backward "\t\s"))))  ;;delete trailing spaces
   (set-mark-command nil))

または全体letを a 内に含めますsave-excursion

マニュアルを参照してください:

http://www.gnu.org/software/emacs/manual/html_node/elisp/The-Mark.html#index-deactivate_002dmark-2801

于 2012-06-18T10:05:08.953 に答える
2

ディエゴはあなたが知りたいことを説明しました。再マッピング C-SPCは良い考えではないことに注意してください。C-SPCはマークリングを操作するので非常に便利です。マニュアルを参照してください。特に、C-u C-SPC

于 2012-06-18T12:29:38.570 に答える