web-dev-qa-db-ja.com

Emacsでスクロールするときにカーソル位置を変更しないでください

スクロール中にEmacsがテキストカーソルの位置(別名、ポイント)を自動的に移動しないようにする方法はありますか?私は自分の場所を失い続け、この迷惑な行動の印を付けます。

次の提案をテストしましたが、成功しませんでした。

(setq scroll-preserve-screen-position t
scroll-conservatively 0)

(UbuntuとOS XでEmacs 24.2を実行しています。)

19
NVaughan

カーソル(ポイント)と表示領域の動作は、notepadgedit、その他の最新のエディターのようにする必要があると思います。ポイントの位置に関係なく表示領域を変更し、すぐに表示に戻す機能ポイントを移動した後のポイント位置への領域。ただし、emacsには別の概念があります。表示領域は常にポイント位置に従い、その逆も同様です。

参照 https://stackoverflow.com/questions/9616623/ctrl-up-down-style-scrolling-in-emacs

以前の答えは特別なイディオムを示しています:可視領域を(ポイントと一緒に)現在の位置から遠くに移動し、ポイントを直前の位置に正確に戻す場合は、mark-ringを使用する癖があります。 mark ringから現在の作業位置に到達する方法は常にあります。isearch-forwardbeginning-of-bufferace-jump-modeなどの多くのコマンドは自動的に前の位置をmark ringに保存します。以前はC-<SPC> C-<SPC>を使用していませんが、ジャンプバックにはC-u C-<SPC>のみを使用しています。 scroll-upmwheel-scrollなどのスクロールコマンドは、余計なマークが多すぎる可能性があるため、デフォルトでは以前の位置を自動的に保存しません。

コマンドclone-indirect-bufferまたはview-buffer-other-windowを使用して、いくつかの場所でバッファーを使用した独立した作業を行うことができます。また、コマンドrecenter-top-bottomC-l)を使用して、表示領域の中心にポイントを継続的に保持します。

12
artscan

スクロール時にemacsがポイントを移動しないようにする方法があるかどうかはわかりません。ただし、後で戻るために場所を保存したい場合は、 マークリング を使用できます。

つまり、C-<SPC> C-<SPC>と入力して現在のポイントの場所をマークリングにプッシュし、後でC-u C-<SPC>と入力してポイントをマークリングの前の場所に設定します。

7
Kirill

私はこれを使用します:

;;; scrollers - M-f, M-b
(global-set-key "\M-f" "\C-u1\C-v")
(global-set-key "\M-b" "\C-u1\M-v")
3
Sergey

以下は私のために働きます:

(custom-set-variables
 '(scroll-conservatively 1000)
 '(scroll-margin 3)
 )