때로는 서로 편집하면서 두 기능을 번갈아 자주 사용합니다. 이러한 상황 C-s <functionname>
에서 다른 기능으로 전환 한 다음 이전에 편집했던 정확한 위치를 찾는 것은 지루하고 고통 스럽습니다 .
마커를 설정 한 다음 버퍼의 두 위치간에 쉽게 앞뒤로 이동할 수 있습니까?
때로는 서로 편집하면서 두 기능을 번갈아 자주 사용합니다. 이러한 상황 C-s <functionname>
에서 다른 기능으로 전환 한 다음 이전에 편집했던 정확한 위치를 찾는 것은 지루하고 고통 스럽습니다 .
마커를 설정 한 다음 버퍼의 두 위치간에 쉽게 앞뒤로 이동할 수 있습니까?
답변:
이맥스 창
C-x 2
동일한 버퍼에 연결된 현재 창 아래에 다른 창 (= 프레임 분할)이 열립니다. 다른 창에 영향을주지 않고 어느 창에서든 점을 이동할 수 있습니다.
을 사용하여 한 창에서 다른 창으로 이동할 수 있습니다 C-x o
. 내장 된 windmove 라이브러리는 창 사이를 쉽게 탐색 할 수있는 기능을 제공합니다.
이 방법이 적합하다면 간접 버퍼를 살펴볼 수도 있습니다 .
레지스터 :
C-xrSPC달리기 point-to-register
C-xrj달리기jump-to-register
프롬프트가 표시되면 임의의 문자를 입력하여 레지스터를 지정하십시오. 1
북마크 :
C-xrm달리기 bookmark-set
C-xrb달리기bookmark-jump
마크 링 :
C-SPCC-SPC현재 위치를 마크 링으로 밉니다 (활성화하지 않고).
C-uC-SPC마크 링을 띄워 이전 위치로 점프합니다. 이것을 반복해서 사용하여 전체 링을 탐색 할 수 있습니다.
일부 명령 (특히 원래 위치에서 알 수 없거나 임의의 거리로 이동할 수있는 명령)은 자동으로 마크 링으로 밀려 나서 C-uC-SPC나중에 다시 돌아 오는 데 사용할 수 있습니다 . 여기에는가 포함되어 isearch
있으므로 C-s어딘가로 이동 한 후 쉽게 다시 건너 뛸 수 있습니다.
교환 포인트 및 마크 :
그리고 Tu Do 의견으로 C-xC-x실행 exchange-point-and-mark
은 두 위치 사이를 점프하는 데 매우 유용합니다. 또한 마크 / 영역을 활성화하지만 C-SPC강조 표시를 지우는 데 사용할 수 있습니다 .
1 당신은 elisp에서 레지스터 기능있는 거 복용을 이용, 사용하는 경우 일부 충돌하지 않는, 오히려 문자보다, 이름을 기호를되도록 할 수 있습니다 물론, 당신이하지 않으면 대화 형으로 설정된 레지스터 (와 충돌하지 싶어 할 그).
C-x C-x
두 위치 사이에서 앞뒤로 이동할 수 있으므로 추가해야합니다 . C-u C-SPC
마크 링을 띄우고 다시 실행하면 다른 곳으로 포인트가 이동합니다.
필의 답변 외에도 몇 가지 옵션이 더 있습니다.
helm-semantic-or-imenu : 현재 파일에서 사용 가능한 모든 정의를 나열합니다. 커서가 정의 안에 있으면 형광펜을 활성화 할 때 해당 정의를 미리 선택합니다.
sr-speedbar : 각 파일의 정의를 나열하는 파일 브라우저. IDE의 개요 트리와 유사합니다.
레지스터와 마커 (모두에 대한 PHILS의 대답과 내 다른, @ 참조 외에 차가워의 마커에 대한 대답), 북마크 , 특히 중 하나 autonamed 또는 일시적 북마크이 도움이 될 수 있습니다. 이러한 특수 책갈피 유형을 사용 하려면 Library Bookmark + 가 필요합니다 .
자동 이름이 지정된 책갈피 는 이름을 지정할 필요가없는 책갈피 입니다. 키를 누르면 생성 및 삭제가 빠릅니다. 동일한 키는 특정 시점에 책갈피를 작성하거나 삭제합니다. 기본적으로이 속성은에 바인딩되어 C-x p RET
있지만 물론 모든 키를 사용할 수 있습니다.
자동 이름이 지정된 책갈피는 일반적인 책갈피와 마찬가지로 영구적입니다. 그러나 선택적으로 자동으로 삭제하도록 할 수 있습니다.
임시 책갈피를 만들거나 기존 책갈피를 임시로 만들 수도 있습니다 . 예를 들어 자동 이름이 지정된 책갈피를 임시 자동으로 만들도록 선택할 수 있습니다.
주어진 책갈피 세트 사이 를 빠르게 순환 할 수 있습니다 . 예를 들어, autonamed 북마크 사이의주기에, 명령을 사용 bmkp-next-autonamed-bookmark-repeat
하고 bmkp-previous-autonamed-bookmark-repeat
(키에 바인딩).
당신은 할 수 있습니다 즐겨 찾기에 위치 강조 가 그들을 발견하기 쉬운, 그래서 다른 방법을.
허용 된 답변에 언급 된 간접 버퍼와 관련하여 ...
M-x clone-indirect-buffer
현재 버퍼에 대한 간접 버퍼를 만듭니다. 새 버퍼의 이름에 '<2>'가 추가됩니다 (또는 이미 중복 버퍼 이름이있는 경우 더 큰 수). 새 버퍼가 새 창에서 열립니다. 다음을 사용하여 하나의 윈도우로 전환 할 수 있습니다 C-x 0
또는 C-x 1
.
함께 M-x winner-mode
하면 쉽게 두 위치 사이를 전환 할 수 있습니다. C-c <left>
/ M-x winner-undo
및 C-c <right>
/ M-x winner-redo
창 구성간에 전환합니다. 이 경우 구성은 하나의 파일을 보는 두 버퍼의 위치가됩니다.
참고 : winner-undo
및 winner-redo
기능은 구성 목록에서 작동합니다. 구성이 변경되면 (예 : 이동 점) 현재 구성이 목록의 헤드가되고 winner-redo
유효하지 않습니다.이 경우 winner-undo
이전 위치로 돌아갑니다.
OP의 상황에서 이것은 다음과 같은 과정으로 이어진다.
M-x winner-mode
M-x clone-indirect-buffer
(새로운 간접 버퍼 이름 : File1.txt <2>)C-x 1
C-x b
로 전환하십시오 (3 단계 이후 다른 버퍼로 전환하지 않은 경우 기본값은 원래 버퍼 임). 그러면 승자가 다시 전환 할 수있는 새로운 구성이 만들어집니다.이전 편집 위치 (창 구성) 로의 전환은 스위치 사이의 창 구성이 변경되는지 여부에 따라 다릅니다.
C-c <left>
/를 사용하여 전환하십시오 M-x winner-undo
.C-c <left>
/을 M-x winner-undo
다시과 C-c <right>
/ M-x winner-redo
전진을 위해.변경은 다른 winner-undo
또는 이외의 것 winner-redo
입니다.
당신이 사용하는 경우 evil-mode
, Vim은 층은 다음 C-o
과 C-i
같은 작동합니다.
evil-jump-backward
/ 명령을 실행합니다 forward
. C-o
점프 목록에서 이전 위치로 이동합니다.이 위치는 자동으로 설정됩니다 (마크는 모션 명령에서 설정 됨). C-i
반대로 간다. 우리는 또한 사용할 수 있습니다 TAB
후 C-o
대신 C-i
. 따라서 두 기능을 모두 사용하면 현재 버퍼에서 앞뒤로 이동할 수 있습니다.
이 기능은 크로스 버퍼 싶은 경우에, 체크 아웃 evil-jumpers
: http://melpa.org/#/evil-jumper
«
evil-jumper는 Vim의 동작과 더 유사하게 점프리스트의 구현을 대체하는 evil-mode를위한 애드온입니다. 특히, 버퍼 경계를 뛰어 넘고 필요한 경우 데드 버퍼를 다시 활성화합니다. 점프 목록을 파일에 유지하고 세션간에 복원 할 수도 있습니다. »
C-o
및 C-i
합니까?
차가워 요 를 사용 하면 mark-ring
각 버퍼 의 마커 또는 global-mark-ring
( 각 버퍼 에 단일 마커가있는) 마커 사이를 빠르게 탐색 할 수 있습니다 .
다중 명령 C-- C-SPC
(버퍼의 경우 mark-ring
) 또는 C-- C-x C-SPC
( 의 경우 ) 를 사용하여이 작업을 수행합니다 global-mark-ring
. 키를 한 번 누른 후에는 일반적인 고드름 사이클링 키 등을 사용하여 링의 마커 사이를 이동합니다.
접두어 인수가없는 동일한 키는 각각 바닐라 이맥스에서 set-mark-command
와 같이 마크 ( )를 설정하고 글로벌 마크 ( pop-global-mark
)를 팝합니다 .
각 마커의 라인 텍스트는 완료 후보로 사용됩니다. 입력 할 때 미니 버퍼 입력은 후보를 일치하는 항목으로 좁 힙니다 (예 : 하위 문자열 또는 정규식 일치). 일치하는 마커 사이를 빠르게 순환하거나 직접 마커를 방문 할 수 있습니다. C-,
사이클링을 위해 정렬 순서 ( )를 변경할 수도 있습니다 .
다른 기능을 들여다보고 싶을 때 가장 작지만 종종 유용한 가능성
(setq scroll-preserve-screen-position t)
C-v와 사이를 전환 할 때 정확한 시작 커서 위치로 돌아갑니다 M-v.
evil-mode
Vim 스타일의 마커를 구현 합니다 . ( m
)로 마커를 설정 evil-set-marker
하고 백틱`( evil-goto-mark
)가있는 마크 또는 마크의 라인 '
( evil-goto-mark-line
)으로 이동할 수 있습니다.
따라서 첫 번째 위치에서 ma
"a"를로 만들고 두 번째 위치에서 "b"를 ma
만든 다음 'a
"a"로 이동 'b
하여 "b"로 이동합니다.
imenu와 아래 코드 사용
(defvar rimenu-position-pair nil "positions before and after imenu jump")
(add-hook 'imenu-after-jump-hook
(lambda ()
(let ((start-point (marker-position (car mark-ring)))
(end-point (point)))
(setq rimenu-position-pair (list start-point end-point)))))
(defun rimenu-jump ()
"jump to the closest before/after position of latest imenu jump"
(interactive)
(when rimenu-position-pair
(let ((p1 (car rimenu-position-pair))
(p2 (cadr rimenu-position-pair)))
;; jump to the far way point of the rimenu-position-pair
(if (< (abs (- (point) p1))
(abs (- (point) p2)))
(goto-char p2)
(goto-char p1))
)))
지난 20 년 동안 저는이 두 보석을 사용해 왔습니다.
(defun ska-point-to-register ()
"Store cursorposition _fast_ in a register. Use ska-jump-to-register
to jump back to the stored position."
(interactive)
(point-to-register 8))
(defun ska-jump-to-register ()
"Switches between current cursorposition and position
that was stored with ska-point-to-register."
(interactive)
(let ((tmp (point-marker)))
(jump-to-register 8)
(set-register 8 tmp)))
나는 그것들을 C-에 묶는다. 그리고 C-를 각각 더 이상 인식하지 않고 지속적으로 사용합니다.
예, 레지스터와 마커 등은 훨씬 유연하고 강력하지만 여전히 다른 편집자로 전환 할 수없는 작고 빠른 도우미 중 하나입니다.
편리한 키에 빠르게 바인딩 될 수 있으므로 매크로를 활용할 수도 있습니다.
예를 들어을 사용하여 위치 N으로 점프를 기록하고을 사용하여 <F3> M-g g N <F4>
키 F5에 지정합니다 C-x C-k b <F5>
. 그런 다음 M 및 F6 위치와 동일하게 수행하십시오. 이제부터 F5와 F6을 교대로 전환하여 N과 M 사이를 이동할 수 있습니다.
심지어 간단한 이후 <F4>
실행하는 마지막 매크로 기록 및 <C-u> F4
마지막에 다음, 당신은 사용하여 키 바인딩 단계와 단순히 대체 위치를 건너 뛸 수 있습니다 <F4>
와 <C-u> F4
.
다른 급진적 인 가능성은로 다른 창에서 간접 버퍼를 만드는 것입니다 <C-x> 4 c
. 이 버퍼는 내용은 같지만 포인트 위치가 다를 수 있습니다. 이제 <C-x> o
일반적인 방법으로 창을 번갈아 가며 바꾸십시오.