6

を実行するC-u C-SPCと、emacs は「前にいた場所」に移動します。その後C-u C-SPC押すと前の場所に戻ります。それはとても素晴らしいです、そして私はそれをたくさん使います。

しかし、何かがいつも私を悩ませていました: マークリングから欠落している唯一のマークはwhere-I-invoked-this-in-the-placeです! パンくずを置いてきて、「おっと、道に迷ったかもしれないから戻って確認してみよう」と言って、パンくずを残さずに今いる場所に戻るようなものです。

私は関数をアドバイスしようとしましたが、私の人生では、プログラムで をシミュレートすることはできませんC-SPC C-SPC

  • 「Ch k」のように、キーの組み合わせが何をするかを「見る」(エコー、メッセージ、トレースなど) 方法を教えてくださいC-SPC C-SPC。後者についてのマニュアルの内容は次のとおりです(強調は私のものです)

C-SPC は、コマンド set-mark-command を実行します。これは、`simple.el' 内のインタラクティブにコンパイルされた Lisp 関数です。

C-@、C-SPC にバインドされます。

(set-mark-command ARG)

ポイントがある場所にマークを設定するか、マークにジャンプします。マークを設定すると、ポイントとマークの間のテキストであるリージョンも変更されます。これは、一部のエディターが「選択」と呼ぶものに Emacs で最も近いものです。

前置引数なしで、ポイントにマークを設定し、古いマーク位置をローカル マーク リングにプッシュします。また、以前のマークが別のバッファに設定されている場合は、グローバル マーク リングに古いマークをプッシュします。

しかし、「ポイントにマークを設定する」ために「前置引数なし」で(非対話的に)使用しようとすると、「引数の数が間違っています」というデバッガエラーが発生します..?(引数と前置引数の違いを認識しています)。

哲学的で非現実的な答えでも構いません。ここでのアイデアが何であるかを理解したいだけです。

4

4 に答える 4

3

(push-mark)あなたが望むことをしているようです。

于 2012-07-27T13:48:14.820 に答える
1

OK、これが私がしたことです

(defun px-push-mark-once-and-back ()
    "Mark current point (`push-mark') and `set-mark-command' (C-u C-SPC) away."
    (interactive)
    (let ((current-prefix-arg '(4))) ; C-u
        (if (not (eq last-command 'px-push-mark-once-and-back))
                (progn
                    (push-mark)
                    (call-interactively 'set-mark-command))
            (call-interactively 'set-mark-command))))

(global-set-key (kbd "<s-left>") 'px-push-mark-once-and-back)
于 2012-07-27T14:34:01.093 に答える
1

OK、この質問からの 2 つの関連する回答を小さなパッケージにまとめまし

C-- C-SPCマークリングを前進するために使用できます。

于 2012-07-29T17:28:25.300 に答える
0

set-markおそらく、またはset-mark-command非対話的に使用するべきではありません。elisp 内では、ポイント (または任意の場所) を適切な名前の変数に保存するだけです。

また、C-h i m emacs m mark.

私は emacs の第一人者であり、マークの動きについて書いているわけではありません。ほとんど使用していません。ただし、以前に必要な動作を見たことがあることは知っています。

于 2012-07-27T14:08:18.017 に答える