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.