2009-10-05 5 views
20

이맥스에 내장 된 커서 이동 명령이 있거나 어딘가에 코드를 작성하거나 스 니펫을 찾아야하는지 궁금합니다. 나는 그들을 꽤 잘 알아보고 vim에서 정기적으로 사용한다. 나는 지금까지 이맥스 문서에서 그것들을 발견하지 못했다. 정력에이맥스는 vim의 shift-h와 shift-l과 같습니다.

, 그들은 다음과 같이 : 변화-H -> 화면 시프트 m의 상단에 커서를 이동 -> 화면 변화-1의 중간에 커서를 이동 -> 이동 커서로 화면의 하단

그냥 명확히하기 위해 커서를 문서의 상단/하단, 문서의 현재 보이는 부분의 상단/하단, 즉 현재의 부분으로 이동하려고하지 않습니다. 화면에 표시됩니다.

나는 지금까지 그 중 하나를 발견했습니다. alt-r은 vim의 shift-m과 같은 것으로 보입니다. 커서를 중간 선의 첫 번째 열로 이동합니다.

답변

28

사용 :

  • Alt+0 Alt+r - 창
  • Alt+- Alt+r의 상단 -

엄밀히 윈도우의 바닥이 바닥에 대한 화면의 상단과 M-- M-r에 대한 M-0 M-r로 작성해야 화면의. 여기서 M은 일반적으로 Alt에 매핑되는 Meta 키를 의미합니다.

M-r 명령 move-to-window-line을 실행 다음과 같이

나는이 키 입력을했다. 나는 이것을 C-h k M-r으로 발견했습니다. Ctrl+h, k, Alt+r. The key sequence C-h k means tell me what the next key sequence does. 명령 이름을 말해 주었고 명령에 숫자 인수를 전달하여 이동할 행을 선택할 수도 있습니다. 패스하지 않으면 포인트를 윈도우 중간으로 이동합니다.

숫자 인수를 명령에 전달하면 typing a number while holding down Meta이됩니다. 자체 빼기 부호는 -1을 의미합니다. 이제 화면의 맨 위로 이동하려면 0 행을 전달하고 -1 행의 맨 아래 행을 전달합니다. 이것은 위의 키 시퀀스를 제공합니다.

move-to-window-line을 다른 키 look at Joe's answer to this question에 바인딩하려는 경우 누구의 정의를 사용하고자하는 기능은 move-to-window-line입니다

+2

사용 : -'M- = Mr' - 당신이 (이 도움이 이맥스 기본값을 변경하는 찾을 수 있도록 중앙 창의 – huntar

+0

smartparens는, SP-스플 라이스 - sexp 살해-around''에'Mr'을 결합 'MR-to-window-line-top-bottom')을'MR '로 바꾼 것이다. –

8

은 다음과 같습니다

move-to-window-line is an interactive built-in function in `C source 
code'. 

It is bound to M-r. 
(move-to-window-line arg) 

Position point relative to window. 
With no argument, position point at center of window. 
An argument specifies vertical position within the window; 
zero means top of window, negative means relative to bottom of window. 

당신은 페이지의 맨 아래로 이동 페이지 상단과 -1로 이동합니다 0로 부를 것이다 . 이것들은 익명의 함수 또는 명명 된 함수를 가진 키에 바인딩 될 수 있습니다. 두 가지 예가 제시됩니다.

익명 함수

(global-set-key [(f4)] (function 
         (lambda() 
          "Go to top of page." 
          (interactive) 
          (move-to-window-line 0)))) 

(global-set-key [(f4)] (function 
         (lambda() 
          "Go to bottom of page." 
          (interactive) 
          (move-to-window-line -1)))) 

명명 된 기능

(defun my-top-of-page() 
    "Go to top of page." 
    (interactive) 
    (move-to-window-line 0)) 

(defun my-bottom-of-page() 
    "Go to bottom of page." 
    (interactive) 
    (move-to-window-line -1)) 

(global-set-key [(f4)] 'my-top-of-page) 
(global-set-key [(shift f4)] 'my-bottom-of-page) 
0

당신이 이맥스 (23)를 사용하는 경우, 단순히 C-l입니다. 처음으로 센터로 갈 것이고 두 번째로 맨 위로 갈 것이며 세 번째로 맨 아래로 갈 것입니다.

편집 :

창의 센터/위/아래에서 현재 행을두고 내 나쁜

아차,,.

(defun bp-goto-center() 
    "move cursor to middle line" 
    (interactive) 
    (move-to-window-line (/ (window-height) 2))) 

(나는 내장 기능과 구별하기 위해 내 모든 기능을 전면에 bp을 추가하거나 : 아직도 조의와 데이브의 답변을 추가하려면 :

2

, 당신과 함께 중간 유용한 얻을 수 있지만 다른 사람들의 ... 그걸 없애면 자유롭게 할 수 있습니다.)

+2

나는이 답변을 +1 하겠지만 코드 블록은 포맷되어 있지 않다. (예, 나는 현학적이다!) – mgalgs

+0

중간에 들어가려면 다음을해야한다.'(move-to-window-line (/ window -buffer-height (get-buffer-window)) 2))'. –

7

Emacs 23.2에서 Mr은 당신이 원하는 것을 정확히 수행합니다.

이 명령을 처음 호출하면 점을 현재 보이는 창의 중심으로 이동하고 다음 연속 호출은 상단과 하단으로 이동합니다.

추가 구성이나 사용자 지정 기능이 필요하지 않습니다.

1

move-to-window-linewindow-buffer-height이 아닙니다. 따라서 Vim이 버퍼 크기가 윈도우보다 작 으면 실제로 동작을 제공하지 않습니다. 터미널에서 Emacs를 사용하지 않고 프레임을 최소화하는 데 신경 쓰지 않기 때문에 'z'가 Vim의 zt, zmzb을 상기시키기 때문에 접두사 키를 다시 사용하도록 선택했기 때문에 (또한 ' Emacs의 C-l와 함께 다음을 사용하여 동일한 효과를 얻을 수 있습니다.

(define-prefix-command 'ctl-z-map) 
(defun move-to-window-line-top() 
    (interactive) 
    (move-to-window-line 0)) 
(defun move-to-window-line-middle() 
    (interactive) 
    (let* ((wb-height (window-buffer-height (get-buffer-window))) 
     (actual-height (if (> wb-height (window-height)) 
          (window-height) 
         wb-height))) 
    (move-to-window-line (/ actual-height 2)))) 
(defun move-to-window-line-bottom() 
    (interactive) 
    (move-to-window-line -1) 
    (beginning-of-line)) 
(define-key ctl-z-map (kbd "h") 'move-to-window-line-top) 
(define-key ctl-z-map (kbd "m") 'move-to-window-line-middle) 
(define-key ctl-z-map (kbd "l") 'move-to-window-line-bottom) 
(global-set-key (kbd "C-z") 'ctl-z-map)