최근에에 대해 배웠으며 multiple-cursors
매우 유용한 패키지처럼 보입니다. 나는 원래 저장소 에 대한 문서를 살펴 보았지만 명령은 여전히 조금 모호합니다.
그런 다음 Emacs Rocks!에서 비디오 를 보았지만 비디오는 훌륭하지만 비디오 를 수행 하는 방법multiple-cursors
보다는 수행 할 수있는 작업 에 주로 중점을 둡니다 .
가장 기본적인 기능을 설명하는 연습, 자습서 또는 예제가 있습니까?
최근에에 대해 배웠으며 multiple-cursors
매우 유용한 패키지처럼 보입니다. 나는 원래 저장소 에 대한 문서를 살펴 보았지만 명령은 여전히 조금 모호합니다.
그런 다음 Emacs Rocks!에서 비디오 를 보았지만 비디오는 훌륭하지만 비디오 를 수행 하는 방법multiple-cursors
보다는 수행 할 수있는 작업 에 주로 중점을 둡니다 .
가장 기본적인 기능을 설명하는 연습, 자습서 또는 예제가 있습니까?
답변:
@bastibe가 설명하는 용도 외에도 여러 커서를 사용하여 줄 그룹의 시작 / 끝에서 텍스트를 추가하거나 제거합니다.
set-rectangular-region-anchor
(당신이 좋아하는 키에 바인딩, 나는 H-space당신이 하이퍼 키가 있다면 Magnars의 제안은라고 생각합니다 )C-n
및 C-p
편집하려는 모든 줄에 커서를 때까지)C-e
) 변경하십시오.등을 사용 하여 줄을 따라 앞뒤로 이동할 수 있으며 forward-word
, forward sentence
각 줄의 텍스트가 동일하지 않더라도 각 줄의 네 번째 단어를 편집 할 수 있습니다.
예를 들어, 나는 항상 이런 종류의 작업을 수행합니다.
C-u M-!ls / test-dat / pp5 / * fsaRETURN
이것은 pp5 디렉토리의 내용을 버퍼에 삽입합니다. 나는 !
리스팅의 시작 부분 에 포인트 를 둔다 :
!/test-dat/pp5/ONAB-6-5_Frag#89.fsa
/test-dat/pp5/QCJB-22-5_Frag#90.fsa
/test-dat/pp5/ONGL-1-5_Frag#102.fsa
/test-dat/pp5/ONGL-1-5_Frag#78.fsa
!/test-dat/pp5/ONAB-6-5_Frag#89.fsa /test-dat/pp5/ONAB-6-5_Frag#89.fsa
!/test-dat/pp5/QCJB-22-5_Frag#90.fsa /test-dat/pp5/QCJB-22-5_Frag#90.fsa
!/test-dat/pp5/ONGL-1-5_Frag#102.fsa /test-dat/pp5/ONGL-1-5_Frag#102.fsa
!/test-dat/pp5/ONGL-1-5_Frag#78.fsa /test-dat/pp5/ONGL-1-5_Frag#78.fsa
ONAB-6-5 <-! /test-dat/pp5/ONAB-6-5_Frag#89.fsa
QCJB-22-5 <-! /test-dat/pp5/QCJB-22-5_Frag#90.fsa
ONGL-1-5 <-! /test-dat/pp5/ONGL-1-5_Frag#102.fsa
ONGL-1-5 <-! /test-dat/pp5/ONGL-1-5_Frag#78.fsa
ONAB-6-5 <- read.file("/test-dat/pp5/ONAB-6-5_Frag#89.fsa")
QCJB-22-5 <- read.file("/test-dat/pp5/QCJB-22-5_Frag#90.fsa")
ONGL-1-5 <- read.file("/test-dat/pp5/ONGL-1-5_Frag#102.fsa")
ONGL-1-5 <- read.file("/test-dat/pp5/ONGL-1-5_Frag#78.fsa")
그리고 voila, 당신은 파일 목록을 코드로 변환하여 그 목록을 읽었습니다. 실제로하는 것보다 실제로 설명하기가 훨씬 어렵습니다!
multiple-cursors
는 정말 강력한 조합을 만들 수 있습니다.
phi-search
명령을 사용하는 것보다 사용하는 것이 더 강력 할 수 있습니다.M-f (x3)
phi-search
. 멋져요!
기본적으로 다음과 같은 두 가지 유스 케이스가 있습니다 multiple-cursors
.
mc/mark-next-like-this
및 mc/mark-previous-like-this
그 이상의 인스턴스를 표시 할 수 있습니다. 그런 다음 즉시 C-w모든 인스턴스를 삭제하고 대신 새 문자열을 작성합니다. 나는 이것을 자주 사용하여 코드에서 변수의 이름을 바꿉니다.mc/edit-lines
놓고 행당 하나의 커서를 얻는 데 사용하십시오 . 이제 이러한 모든 커서에서 작동하는 일반 편집 명령을 사용할 수 있습니다.첫 번째 사용 사례는 특히 유용합니다 expand-region
. 나는 한 er/expand-region
결합 C-j, 그리고 mc/mark-next-like-this
및 mc/mark-previous-like-this
에 C->와 C-<. 이를 통해 단어 위치를 쉽게 선택하고 해당 단어의 다음 / 이전 단어를 즉시 표시 할 수 있습니다.
두 번째 사용 사례는 대부분의 매크로 사용을 대신했습니다. 매크로를 기록한 다음 여러 장소에 적용하는 대신 모든 장소에 커서를 놓고 모든 장소에서 한 번에 작업을 수행합니다.
multiple-cursors
예에 대한 추천 mark-next-like-this
및 mark-previous-like-this
?
C->
and 및 C-<
for mark-next-like-this
를 사용 mark-previous-like-this
합니다.
가끔 사용하는 추가 기능을 추가하고 싶습니다 multiple-cursors
.
다음이 유용하다는 것을 알았습니다.
때로는 다음 #
또는 다음 ,
또는 특정 구분 기호 로 이동해야하는 경우가 있습니다 . 각 커서마다 다른 단어 수를 이동해야 할 때 특히 유용합니다. 그것은 기능을 제공 iy-go-to-char
하고 iy-go-to-char-backward
당신이 결합 멋지게 사용할 수 있습니다.
iy
각 커서 아래에 약간 다른 선이 있고 점 아래에서 인용 된 문자열을 선택하려는 경우 와 비슷한 이유로 실제로 유용합니다 .
이것들은 내 구성에서 생략 된 것이지만 유용합니다. 아마 내가 작성하지 않았을 것입니다.
입력 프롬프트
각 커서 아래에 다른 문자열을 넣는 요청에 대한 응답으로 Magnars 에서이 것을 얻었습니다. 코드는 간단하지만 무언가에 바인딩하고 여러 커서에 사용하는 것은 각 위치에 약간 다른 것을 삽입하는 편리한 방법입니다.
(defun prompt-for-insert ()
(interactive)
(insert (read-string "Insert: ")))
포인트 증가 번호
이것은 SO 또는 emacswiki에서 나왔습니다. 확실하지 않습니다. 그것은 그 자체로도 유용하며, 또한mc/insert-numbers
(defun my-increment-number-decimal (&optional arg)
"Increment the number forward from point by 'arg'."
(interactive "p*")
(save-excursion
(save-match-data
(let (inc-by field-width answer)
(setq inc-by (if arg arg 1))
(skip-chars-backward "0123456789")
(when (re-search-forward "[0-9]+" nil t)
(setq field-width (- (match-end 0) (match-beginning 0)))
(setq answer (+ (string-to-number (match-string 0) 10) inc-by))
(when (< answer 0)
(setq answer (+ (expt 10 field-width) answer)))
(replace-match (format (concat "%0" (int-to-string field-width) "d")
answer)))))))
eval-and-replace
이것은 매우 강력하며 실제로 유용한 비트 'n'조각을 가능하게합니다. 커서 뒤에있는 sexp가 무엇인지 평가하고 평가 결과를 삽입합니다.
와 결합 multiple-cursors-numbers
예에 삽입 두 가지의 힘, 또는가는 일련의 0 1 2 0 1 2 0 1 2
각 행 또는 무언가에 걸쳐. (이 두 가지를 모두 유용하게 사용했습니다) 또는 s.el
기본 항목으로 지루한 Java 구성을 작성하는 데 사용하십시오 . 당신은 각각을 작성하고 CONFIG_VALUE_VARIABLE
그것을 CONFIG_VALUE_VARIABLE = "configValueVariable"
실행 하여 그것을 변환합니다 s-camel-case
.
(defun eval-and-replace ()
(interactive)
(let ((value (eval (preceding-sexp))))
(kill-sexp -1)
(insert (format "%s" value))))
multiple-cursors
README 파일을 읽는 것만으로도 매우 빠르게 시작할 수있었습니다 . 나의 추천은 단지 배우는 것mc/mark-next-like-this
입니다. 시도해보고 그 기능에 익숙해 지십시오. "여러 개의 커서를 사용할 수 있는지 궁금합니다 ..."로 시작하는 질문이있을 때마다 README를 다시 참조하십시오. 비디오는 초보자에게 도움이 될 것입니다.