종종 지역 주변에 텍스트를 적용해야하는 상황이 있습니다. HTML과 간단한 경우에는 이미 라이브러리가 있습니다. 그러나 일반적인 경우는 어떻습니까? 이 지역의 시작과 끝을 무엇을 삽입 할 것인지 묻고 싶습니다.
종종 지역 주변에 텍스트를 적용해야하는 상황이 있습니다. HTML과 간단한 경우에는 이미 라이브러리가 있습니다. 그러나 일반적인 경우는 어떻습니까? 이 지역의 시작과 끝을 무엇을 삽입 할 것인지 묻고 싶습니다.
답변:
나는 주변을 둘러 보았고 John D. Cook이 게시물을 찾았 습니다 . 그는 간단한 대화식 함수를 작성하여 지역 주변의 HTML / XML 태그를 쉽게 얻는 방법을 보여줍니다. 그로부터 함수를 두 번 요청하도록 수정했습니다.
(defun tag-word-or-region (text-begin text-end)
"Surround current word or region with given text."
(interactive "sStart tag: \nsEnd tag: ")
(let (pos1 pos2 bds)
(if (and transient-mark-mode mark-active)
(progn
(goto-char (region-end))
(insert text-end)
(goto-char (region-beginning))
(insert text-begin))
(progn
(setq bds (bounds-of-thing-at-point 'symbol))
(goto-char (cdr bds))
(insert text-end)
(goto-char (car bds))
(insert text-begin)))))
더 중요한 것은이 기능을 보조 도구로 사용할 수도 있습니다 (예 : 키를 바인딩하여 특정 텍스트 비트를 매핑하려는 경우).
(defun tag-php ()
(interactive)
(tag-word-or-region "<?php " "?>"))
evil
나는 여기에를 방해를 사용하는 것이. 아마도 유형의 기능이 interactive "r"
더 강력하게 작동 했을 까요?
다른 접근법을 제안합니다. 영역이있는 경우 정의에 따라 영역 point
의 시작 (또는 끝)에 mark
있어야하고 끝 (또는 시작)에 있어야합니다. exchange-point-and-mark
즉 C-x C-x
, 원하는 텍스트를 입력 한 다음을 사용 하여 영역의 다른 끝으로 이동할 수 있습니다. 래퍼의 후반부를 입력하면 완료됩니다.
삽입 텍스트를 묻는 메시지가 명시 적으로 표시되지는 않지만 적은 노력으로 동일한 작업을 수행 할 수있는 방법이있을 것이라고는 상상할 수 없습니다.
multiple-cursors
하면 활성 영역의 시작과 끝에서 동시에 텍스트를 삽입하도록 조정할 수 있는지 궁금합니다 .
C-x C-x
. 답을 사용하여 함수 ( C-c something
) 를 호출 해야하며 return
각 항목을 마친 후에도 적중해야합니다 . 당신이 무엇을하든, 당신은 두 번 더 키를 눌렀습니다. 즉, elisp에서 전화를 걸고 싶다면 도움이되지 않습니다.
다양성을 위해서만 :
어떤 임의의 시작과 끝 텍스트로이 작업을 수행하는 또 다른 방법은 사용하는 것입니다 replace-regexp
지역에 : 일치 .+
와 교체 before \& after
하거나 사용하려는 어떤 텍스트 before
와 after
.
명령을 작성할 수는 있지만 주어진 파일에서 동일한 시작 / 종료 텍스트를 여러 곳에 적용하려는 경우를 생각하고 있습니다. 매크로를 기록하거나 미니 버퍼 기록을 사용하여 다른 지역에서 반복 할 수 있습니다.
물론 줄 바꿈하려는 텍스트를 정규 표현식으로 표현할 수 있으면 영역을 선택할 필요가없고 query-replace-regexp
버퍼에서 수행 할 수 있지만 줄 바꿈하려는 텍스트는 그와 일치하지 않을 수 있습니다.
<?php
...를 추가 한?>
다음 영역과 유형<?php
(또는 키 바인딩) 을 선택할 때 페어를 감쌀 수 있습니다. 그러나 원샷 쌍이 많은 경우 이러한 라이브러리를 사용하는 쉬운 방법이 없습니다.