emacs : 스크롤 / 페이지 업 / 다운 후 마지막 위치로 돌아가는 방법?


14

발행 scroll-up또는 scroll-down이맥스에서 포인트를 이전 위치로 되돌릴 수있는 빠른 방법이 있습니까 (마크 링에 포인트를 추가하는 것을 기억하지 않는다고 가정)?

또는 스크롤링 동작을 변경하여 스크롤 한 다음 아래로 스크롤하거나 그 반대로 스크롤하여 포인트를 원래 위치로 되돌릴 수있는 방법이 있습니까 (마크 링을 방해하지 않음)? (예를 들어, 스크롤이 x를 화면 높이 인 지점을 정확히 x 선으로 이동하게 함)

나는 이맥스에 익숙해지는 과정에 있으며 가장 일반적인 저주를 유발하는 상황 중 하나입니다. 마크 링에 내 줄을 추가하지 않고 코드의 다른 부분을 보려고 스크롤하면 시도가 고통 스럽습니다. 내가 작업 한 코드 줄을 재배치하기 위해. 따라서 기술 솔루션을 요청하는 동안 노련한 사용자 가이 문제를 피하는 방법에 대해서도 관심이 있습니다. 마크를 설정하거나 창을 분할하여 둘러 보거나 다른 패턴을 사용하는 것을 기억하십니까?

감사

답변:


13
(setq scroll-preserve-screen-position t)

이 설정 을 사용하면 페이지를 위아래로 이동하면 커서가 원래 줄로 돌아갑니다. 또한 Emacs 버전 23 이상에서 원래 열을 유지합니다.

선호하거나 선호하지 않을 수 있습니다

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

원래 위치가 여전히 보이는 경우 버퍼에서 커서 위치를 유지하지 않고 스크롤 할 때 항상 커서의 화면 위치를 유지합니다.


2
나도 감사합니다! 몇 년 동안, 스크롤하기 전에 "<>"를 입력했습니다. 검색 대상으로 돌아가십시오.
JRobert

나에게 이것은 scroll-up-line(스크롤 휠과 함께 사용하는) 커서가 화면의 상단이나 하단에 닿을 때 한 문자 앞으로 이동하게합니다.
asmeurer

@asmeurer 나는 이것을 관찰하지 못한다. init 파일에 이상한 것이 있거나 Emacs 버전에 버그가 있어야합니다.
Gilles 'SO- 악마 그만해'

네, 게시 한 후에 알아 냈습니다. emacs.stackexchange.com/questions/12439/… 에서 새 질문을 열었습니다 .
asmeurer

나는 이것이 있어야한다고 생각합니다 (setq scroll-preserve-screen-position 'always). 그렇지 않으면, C-v M-v당신이 시작한 곳으로 포인트를 다시 넣지 않습니다.
윌프레드 휴즈에게

6

내가 잘 작동하는 것은을 사용하여 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)

2
마찬가지로 추가 패키지가 필요하지 않은 경우 : C-_ C-f C-_(실행 취소, 이동, 실행 취소).
Gilles 'SO- 악마 중지'

1
@Gilles True이지만 실행 취소 스택은 두 가지 요소 만 더 늘어났습니다. :)
Trey Jackson

1

설명하는 문제를 피하는 방법에 대한 귀하의 질문에 대한 답변으로 (코드의 다른 곳을보고 내가 일했던 지점으로 돌아갑니다) ...

일반적으로 다른 곳을 간단히보아야 할 때 화면을 분할합니다. 그런 다음을 사용하여 원래 화면으로 돌아가서 C-x o분리하지 C-x 1않고 다시 정상으로 돌아갈 수 있습니다.

또한 순방향 및 역방향 i- 검색을 사용하여 코드에서 특정 관심 지점을 찾습니다. 원하는 것을 알면 코드를 탐색하는 매우 효율적인 방법입니다.


0

현재 위치에서 몇 줄만 스크롤하는 경우 이동 점없이 창을 스크롤 할 수 있습니다.

(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 하는 경우 비슷한 작업을 수행하는 다른 패키지가 많이 있지만 합니다.

동시에 두 개의 코드 영역을 시각적으로 볼 필요가 있다면 프레임을 두 개의 창으로 수평으로 분할 한 다음 완료되면 두 번째 창을 버립니다.

그러나 대부분 두 개의 프레임 만 사용합니다. 하나는 현재 작업중인 프레임이고 다른 하나는 동일한 또는 다른 파일을 이동하는 데 사용되는 참조 프레임입니다.


원하는 지점으로 이동하지 않고 현재 지점 위나 아래를보고 싶은 경우 순환 할 수 있습니다 C-l.
asmeurer

0

패키지 복원 지점 은 사용자가 설명한대로 정확하게 설명합니다.

(구성 가능한) 명령 세트 (기본적으로 명령 표시, 스크롤 및 페이지 업 / 다운)가 실행되었는지 확인한 다음 keyboard-quit일반적으로 C-g또는에 바인딩 된을 눌러 이전 지점 (커서) 위치로 돌아갈 수 있습니다 ESC.

면책 조항 : 나는이 패키지의 저자입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.