it-swarm-ja.com

emacs:スクロール/ページアップ/ダウン後に最後の位置に戻る方法は?

Emacsでscroll-upまたはscroll-downを発行した後、ポイントを前の位置に戻す簡単な方法はありますか(マークリングに追加することを覚えていなかったと仮定します)?

あるいは、上にスクロールしてから下にスクロールする(またはその逆)ようにスクロール動作を変更して(マークリングに干渉することなく)ポイントを元の位置に戻す方法はありますか? (たとえば、スクロールしてポイントを正確にx行移動させます。xは画面の高さです)

私はemacsに慣れている最中であり、これは最も一般的な呪いを誘発する状況の1つです。マークリングに行を追加することを忘れずにコードの別の部分を表示するためにスクロールすると、試してみるのが面倒です。作業していたコード行を再配置します。そのため、技術的な解決策を求めている一方で、経験豊富なユーザーがこの問題をどのように回避しているかについても興味があります。マークを設定したり、ウィンドウを分割して見回したり、他のパターンを使用したりすることを覚えているだけですか?

ありがとう

14
Ian Mackinnon
(setq scroll-preserve-screen-position t)

この設定で 、ページを上下に移動すると、カーソルは元の行に戻ります。また、Emacsバージョン23以降でも元の列を保持します。

あなたは好むかもしれないし、好まないかもしれない

(setq scroll-preserve-screen-position 'always)

これは、元の位置がまだ表示されている場合にカーソル位置をバッファに保持するのではなく、スクロール時に常にカーソルの画面位置を保持します。

私がうまく機能することがわかったのは、 goto-last-change.el 、最後に編集した場所に戻ります。私はバインディングが好きです:

(require 'goto-last-change) ;; download this package and install in load-path
(global-set-key (kbd "C-x C-\\") 'goto-last-change)
6
Trey Jackson

あなたが説明する問題をどのように回避するかについてのあなたの質問に答えて(コードの他の場所を見て、それから私が働いていたポイントに戻る)...

通常、他の場所を簡単に見る必要がある場合は、画面を分割します。次に、C-x oで元の画面に戻り、C-x 1で分割を解除すると、通常の画面に戻ります。

また、順方向および逆方向のi-searchを使用して、コード内の特定の関心のあるポイントを見つけます。探しているものがわかっている場合、これはコードをナビゲートするためのかなり効率的な方法だと思います。

1
Mox

現在の場所から数行しかスクロールしていない場合は、これを使用して、ポイントを移動せずにウィンドウをスクロールできます。

(defun scroll-in-place (scroll-up)
  "Scroll window up (or down) without moving point (if possible).

SCROLL-Up is non-nil to scroll up one line, nil to scroll down."
  (interactive)
  (let ((pos (point))
        (col (current-column))
        (up-or-down (if scroll-up 1 -1)))
    (scroll-up up-or-down)
    (if (pos-visible-in-window-p pos)
        (goto-char pos)
      (if (or (eq last-command 'next-line)
              (eq last-command 'previous-line))
          (move-to-column temporary-goal-column)
        (move-to-column col)
        (setq temporary-goal-column col))
      (setq this-command 'next-line))))

;;;; ------------------------------------------------------------------------
(defun scroll-up-in-place ()
  "Scroll window up without moving point (if possible)."
  (interactive)
  (scroll-in-place t))

;;;; ------------------------------------------------------------------------
(defun scroll-down-in-place ()
  "Scroll window up without moving point (if possible)."
  (interactive)
  (scroll-in-place nil))

(global-set-key (read-kbd-macro "M-<down>") 'scroll-up-in-place)
(global-set-key (read-kbd-macro "M-<up>") 'scroll-down-in-place)

ファイルの完全に異なるセクション(または完全に別のファイル)に移動する場合は、 breadcrumb を使用することがありますが、同様のことを行うパッケージは他にもたくさんあります。 。

コードの2つの領域を同時に視覚的に確認する必要がある場合は、フレームを水平方向に2つのウィンドウに分割し、完了したら2番目のウィンドウを破棄します。

ただし、ほとんどの場合、2つのフレームを使用します。一方は現在の作業フレームで、もう一方は参照フレームであり、同じファイルまたは他のファイルをジャンプするために使用されます。

0
Joe Casadonte

パッケージ 復元ポイント 箱から出して、あなたが説明したことを正確に実行します。

一連の(構成可能な)コマンドが実行されたかどうかをチェックし(デフォルトでは、コマンドのマーク、スクロール、およびページアップ/ダウン)、keyboard-quitを押すことで前のポイント(カーソル)の位置に戻ることができます。通常は C-g または ESC

免責事項:私はこのパッケージの作者です。