GNU Emacs에서 한 줄씩 스크롤하는 방법은 무엇입니까?


87

간단히 말해서, vim 및 대부분의 다른 편집기에서와 같이 emacs에서 스크롤링을 시도하고 있습니다. (I 예를 들어있을 때, 하단 / 상단에서 두 줄, 및 I / 최대 눌러 Ctrl- p, n, ↑, ↓)는 한 줄 위 또는 아래가 아닌 반 화면 이동합니다.


5
나는 이것이 결코 고쳐지지 않을 것이라고 확신합니다. 이는 지난 90 년대에 결핍 다시이었고, 여전히 2010 년에 여기 생겼습니다
— 스티브 쿠오을

12
@Steve Kuo : 배싱 종료-이것은 설계된대로 작동 하지만 간단한 설정으로 변경 (또는 "고정") 할 수 있습니다.
— Teddy

17
@Teddy와이 "간단한 설정"은 무엇입니까?
— Steve Kuo

1
@Teddy 그래, 뭐야?
— Scooter

@Rook : 사실 나는 z.Emacs 느낌을 얻기 위해 vim에서 더 자주 사용하는 것이 좋습니다 ;-) 이것은 드문 일이지만 실제로 IMHO를 한 줄씩 스크롤하는 것보다 더 유용합니다.
— U. Windl

답변:


51

EmacsWIki에 대한 몇 가지 제안을 참조하십시오.

(setq 스크롤 1 단계
      스크롤-보수적으로 10000)

3
실제로 보았다-답변, 귀하 및 jrockway 모두이지만 Wiki에서는 둘 다 권장되지 않습니다. 불행히도 그 이유는 명확하게 설명되어 있지 않습니다. 그래서 누군가가 결함없이 작동하는 방법을 찾길 바라면서 질문을 올렸습니다.
— Rook

1
왜 이것이 권장되지 않는지 알 수 없습니다. 나는 비슷한 구성을 사용하고 있으며 꽤 잘 작동하고 있습니다. 더 확실히하기 위해 스크롤 단계 문서를 참조하십시오 (마지막 문장 참고) : * 포인트가 이동할 때 창을 스크롤 할 줄 수입니다. 프레임에서 포인트를 다시 가져 오지 못하면 포인트가 대신 중앙에 위치합니다. 이것이 0이면 포인트가 프레임을 벗어나면 항상 중앙에 위치합니다. 스크롤링을 항상 한 번에 한 줄씩 표시하려면 1로 설정하는 대신`scroll-conservatively '를 큰 값으로 설정해야합니다.
— an0

예, 조금 더 둘러 보면 위키의주의 사항을 뒷받침 할만한 내용이 많지 않습니다. 예를 들어 스크롤 단계는 Google 검색을 통해 여러 .emacs 파일에서 매우 일반적으로 보입니다. 위키 작성자가 이전 버전의 emacs를 언급하고있는 것일까 요?
— ars

어떤 문제가 없었어요 scroll-conservatively. 이에 대한 경고는 약간 이상합니다. 문제가 발생하면 init.el에서 줄을 제거하는 것이 쉽습니다!
— dbr

1
@ars는 groups.google.com/group/gnu.emacs.help/browse_thread/thread/... 이 때로는 가장 큰 문제는 아닌 것 같아 중간에 커서를 이동할 수, 이맥스 <23.1와 큰 파일 때문에
— DBR

51

화면의 위치를 ​​정확히 지정하려면 Ctrl-L을 사용할 수 있습니다.

  • 기본적으로 현재 줄을 화면 중앙에 배치합니다.

  • ESC 0 Ctrl-L은 현재 행을 맨 위에 배치합니다.


14
이것을 잘못 받아들이지 마십시오. 그러나 그게 한 줄씩 스크롤하는 것과 무슨 관련이 있습니까? (즉, 질문)
— Rook 2009-07-15

9
(저자의 의견으로는) 도구를 사용하여보다 자연스러운 대체 워크 플로를 제공하는 것이 합리적입니다. 그러나 그 효과에 대한 면책 ​​조항으로 시작해야하며 가능하다면이 접근 방식이 "더 나은"이유를 설명해야합니다.
— dmckee --- ex-moderator kitten 새끼 고양이

2
@dmckee-저는 vim을 사용했습니다 ... 음, 오랫동안. 그것으로 아주 좋습니다. 그러나 내가 lisp로 무언가를하고 있기 때문에, 나는 적어도 emacs를 다시 잡도록 내 자신을 강요하기 시작했고,이 "대안적인"이동 방법은 현재 나에게 너무 많은 것입니다. 튜토리얼을 읽고, 그것을 알고 ...하지만 너무 이상합니다, imho. 자연스럽지 않습니다.
— Rook

1
@Idigas : 물론입니다. 그것은 공평하며 스타 블루의 조언을들을 필요가 없습니다. 그러나 나는 이러한 종류의 대답이 선행 적이고 설득력있는 설명을 포함한다면 도움 이 될 수 있다고 생각합니다 .
— dmckee --- 전 중재자 새끼 고양이

1
예, 이것은 몇 번의 키 입력으로 작업을 수행합니다. ( "한 줄씩 스크롤하는 방법"을 검색 한 이유는 "코드를 원하는 위치로 이동하는 방법"을 검색하는 유용한 방법처럼 보였기 때문입니다.) 감사합니다!
— Ennael

42

나는 파티에 조금 늦었지만 패키지 설치에 신경 쓰지 않는다면 부드러운 스크롤 ( github , MELPA 에서도 사용 가능 )이 당신이 찾고있는 것일 수 있습니다. 확실히 저에게 효과적입니다.

설치가 완료되면 init.el에 다음을 표시 할 수 있습니다.

(require 'smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)

마지막 줄은 선택 사항입니다. 화면 가장자리가 아니라 화면 가장자리 근처 에서 스크롤되기 시작 하므로 항상 지점 주변에 약간의 컨텍스트가 있습니다. 취향에 맞게 조정하십시오.


7
나는 이것을 읽을 때 눈물을 흘렸다. 이것이 질문에 대한 답이라고 확신합니다.
— Eric Brown

3
예, Emacs를 사용하는 Vim 사용자로서 이것이 바로 제가 찾던 것입니다.
— juanjux 2014 년

이 솔루션과 스크롤 단계 솔루션을 모두 사용했는데, 아래쪽에서 6 번째 줄로 이동하고 아래로 누르면 한 줄씩 스크롤되고 위쪽에서 동일하게 스크롤 될 때 조합이 매혹적입니다.
— Emad Elsaid

슬프게도, 예를 들어, 발생 모드 또는 검색을 사용하여 파일 주위를 뛰어 다니는 경우 부드러운 스크롤이 자주 실패합니다. 둘 다 포인트를 화면 밖으로 가져올 수 있으며 결과를 표시하려면 CL을 눌러야합니다.
— Erik Knowles

27

내 해결책은 Emac의 기본 스크롤링을 변경하는 것이 아니라 매크로에서 키 시퀀스 명령을 만드는 것입니다. 이렇게하면 원할 때 한 번에 한 줄씩 편리하게 스크롤 할 수 있습니다. 이상적이지는 않지만 매우 쉽습니다. M- (↓)와 M- (↑)를 사용할 수있는 경우가 있습니다. 그래서 제가 사용했습니다.

이것이 내가 한 방법입니다. 첫째, 위아래로 한 줄 스크롤에 대한 매크로를 기록해야합니다.

매크로 시작

C-x ( 

하나 아래로 스크롤

C-u 1 C-v

매크로 중지

C-x )

위로 스크롤하려면

C-u 1 M-v

다음으로 매크로 이름을 지정해야합니다.

M-x name-last-kbd-macro

다음과 같은 메시지가 나타나면 이름을 지정하십시오.

down-one-line

그런 다음 다음을 사용하여 키 시퀀스를 해당 명령 이름에 바인딩합니다.

M-x global-set-key

그리고 메시지가 표시되면 다음과 같이 사용하십시오.

M-(down arrow)

그런 다음 바인딩 할 명령을 묻고 이전에 발명 한 이름 (예 : 한 줄 아래로)을 지정해야합니다.

여기에서이 정보를 얻었습니다. 아래 및 다른 곳에서 .emacs 파일에 매크로를 추가하는 방법에 대한 지침을 찾을 수도 있습니다.

매크로 정의 설명은 여기

스크롤을 제어하는 ​​방법은 여기


23

저는 .emacs2000 년부터 제 파일 에서 이것을 사용하고 있습니다.

(global-set-key (quote [M-down]) (quote View-scroll-line-forward))
(global-set-key (quote [M-up]) (quote View-scroll-line-backward)) 

이렇게하면 Emacs 기본 동작을 유지할 수있을뿐만 아니라 수행중인 작업에 따라 한 번에 한 줄씩 스크롤 할 수 있습니다.

적어도 GNU 이맥스 (22) 내가 최근에 이맥스 24로 업그레이드 것을 발견되지 때까지이 일을 View-scroll-line-forward하고 View-scroll-line-backward더 이상 사용할 수 있습니다. 사냥을 한 후 스크롤 업 라인과 스크롤 다운 라인이 작동한다는 것을 발견했습니다. 따라서 Emacs 24를 사용하고 있다면 이것을 사용할 수 있습니다.

(global-set-key (quote [M-down]) (quote scroll-up-line))
(global-set-key (quote [M-up]) (quote scroll-down-line)) 

나는 대부분 Emacs 23을 건너 뛰었으므로 사용중인 버전이라면 위의 두 가지를 모두 실험 할 수 있습니다.

참고 : 버퍼 가 한 줄 위로 이동 하기 때문에 scroll-up-line실제로는 한 줄 아래로 스크롤 합니다.


: 덕분에이 작품 ...하지만 내가 여기에 대해 질문 한 또 다른 문제 명중 stackoverflow.com/questions/19256551/...
— scorpiodawg

13

스크롤 작업을 수행하기 위해 화살표 키를 리 바인드했습니다.

(global-set-key [up] (lambda () (interactive) (scroll-down 1)))
(global-set-key [down] (lambda () (interactive) (scroll-up 1)))

(global-set-key [left] (lambda () (interactive) (scroll-right tab-width t)))
(global-set-key [right] (lambda () (interactive) (scroll-left tab-width t)))

2
이것은 내가 찾던 것과 정확히 다릅니다. 화면이 스크롤되는 것을 원하지는 않지만 (스크롤 잠금이 활성화 된 것처럼) 화면이 "이동"하기를 원합니다 ... 오, ... 메모장이 어떻게 작동하는지 :)
— Rook

12

Simples는 다음을 수행합니다.

(global-set-key [M-up] (lambda () (interactive) (scroll-up 1)))
(global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))

그러면 메타 커서가 위로 이동하고 메타 커서가 아래로 이동합니다.

QED. 위의 모든 사람들이 무엇을 흡연했는지 확실하지 않습니다!


또는 방금 게시 한 것처럼 스크롤 업 라인과 스크롤 다운 라인을 사용할 수 있습니다.
— Rajesh J Advani 2013

5

멋진 ctrl-up, ctrl-down 스크롤 동작을 활성화하기 위해 .emacs 파일에 다음이 있습니다. 마우스 휠에도 사용합니다.

(defun scroll-down-in-place (n)
  (interactive "p")
  (previous-line n)
  (scroll-down n))

(defun scroll-up-in-place (n)
  (interactive "p")
  (next-line n)
  (scroll-up n))

(global-set-key [mouse-4] 'scroll-down-in-place)
(global-set-key [mouse-5] 'scroll-up-in-place)
(global-set-key [C-up] 'scroll-down-in-place)
(global-set-key [C-down] 'scroll-up-in-place)

방금 시도했지만 내가 찾던 행동이 아닙니다. 그것은 당신이 화면의 마지막 줄로 내려갈 수있게 해주지 만, 아래로 클릭하면 여전히 "여러 줄 위로 화면을 찌그러 뜨릴 것입니다."... 어떻게 더 잘 설명할지 모르겠습니다.
— Rook

마우스 휠 매핑 아이디어가 마음에 듭니다. 그러나 내장 된 View-scroll-line-forward 및 View-scroll-line-backward (또는 최신 스크롤 업 라인 및 스크롤 다운 라인)가 자체 함수를 정의하는 대신 작동하지 않습니까?
— Rajesh J Advani 2013

2

"vim"스크롤을 사용하려면 다음을 .emacs 파일에 넣으십시오.

(defun next-line-and-recenter () (interactive) (next-line) (recenter))
(defun previous-line-and-recenter () (interactive) (previous-line) (recenter))
(global-set-key (kbd "C-n") 'next-line-and-recenter)
(global-set-key (kbd "C-p") 'previous-line-and-recenter)

@ 매트 나를 위해 않습니다
— jjpikoov

2

을 사용하는 성가신 수 있기 때문에 M-up, M-down그것은 이러한 명령을 과부하 또 org 모드를 방해하기 때문이다. 이 문제를 피하기 위해 개인적으로 M-page-up M-page-down" 를 결합한 명령을 사용합니다 . 여기에서는 스크롤을 1 줄로 위아래로 정의했습니다.

;;;scroll by `number-of-lines' without the cursor attached to the screen
(global-set-key [M-prior] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-down number-of-lines)
                                                  (forward-line (- number-of-lines)))))
(global-set-key [M-next] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-up number-of-lines)
                                                  (forward-line number-of-lines))))

;;;scroll by `number-of-lines' with the cursor attached to the screen
(global-set-key [S-M-prior] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-down number-of-lines))))
(global-set-key [S-M-next] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-up number-of-lines))))

1

M-x customize-variable scroll-conservatively

1로 설정합니다.

하지만 당신은 정말로 이것을하고 싶지 않습니다.


5
실제로 보았다-답변, 귀하 및 ars 모두이지만 Wiki에서는 둘 다 권장되지 않습니다. 불행히도 그 이유는 명확하게 설명되어 있지 않습니다. 그래서 누군가가 결함없이 작동하는 방법을 찾길 바라면서 질문을 올렸습니다.
— Rook

3
이것이 좋은 생각이 아닌 이유를 우리 멍청이에게 철자 할 수 있다면 편리합니다.
— Daniel

이것이 좋은 생각이 아닌 이유를 생각할 수있는 유일한 이유는 스크롤링이 느려지기 때문입니다. 기본 절반 화면 대신 항상 한 번에 한 줄씩 스크롤해야합니다. (내 생각에?)
— ShreevatsaR

1

당신이 만들 수있는 빠른 방법을 찾고 있다면 스크롤과 같은 효과를 입력 C-n하고 C-l순차적으로 아래로 커서를 이동 한 후를 중심으로.


0

.xsession에서 emacs를 시작하면, 필자의 경우 scroll-conservatively 100+로 설정하는 것은 작동하지 않으며 scroll-step 1도 작동하지 않습니다. 그러나 X 이후에 emacs를 시작하면 작동합니다.


0

마우스를 사용해도 괜찮고 스크롤 휠이있는 경우 다음 중 하나를 사용하여 변수 mouse-wheel-scroll-amount를 사용자 정의 할 수 있습니다.

Ch v mouse-wheel-scroll-amount (customize를 클릭하고 값을 "Specific # of lines"1, ApplyAndSave로 변경합니다.)

또는 .emacs에 다음 줄을 추가하십시오 : '(mouse-wheel-scroll-amount'(1 ((shift). 1) ((meta)) ((control). text-scale)))

https://www.emacswiki.org/emacs/Scrolling에 많은 가능성이 나열되어 있습니다.

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