Emacs에서 블록을 선택하거나 강조 표시하는 방법은 무엇입니까?


84

마우스를 사용하지 않고 vim의 시각 모드처럼 키보드에서 수행하는 이맥스에서 블록을 선택하거나 강조 표시하고 싶습니다. 키보드에서이 작업을 수행하는 가장 쉬운 방법은 무엇입니까?


2
CMhmark-defun
후행 슬래시

답변:


66

emacs에서 region-rectangle을 살펴보십시오.

즉, 당신은 평소처럼 선택을 시작 Control- Space다음으로 지역을 죽일 Control- x r k붙여 넣기 (또는 홱 당김 과 블록을 살해) Control- x r y.


11
그것은 영역을 죽이는 것이 아니라 직사각형을 죽입니다. 이것은 제 경험상 vim의 비주얼 모드가하는 것과는 많이 다릅니다.
Allen

2
어떻게 다릅니 까?
Ken Williams

73

질문을 올바르게 이해했다면 원래 직사각형 영역에 관한 것이 아닙니다.

C-Spc 현재 위치에 표시를합니다.

나중에 커서가 어디에 있든 마지막 표시와 현재 위치 사이의 텍스트가 "선택"됩니다 (를 활성화하여 강조 표시 할 수 transient-mark-mode있지만 강조 표시를 원하지 않을 때 표시를 삭제해야 함을 의미합니다).

다음과 같은 명령을 사용하여 해당 지역에서 작업 할 수 있습니다.

C-w. . 킬 지역. 이것은 영역을 삭제하고 킬 링에 넣습니다.
C-y. . 양키. 킬 링의 마지막 스 니펫이 삽입됩니다.
M-y. . 사이클 킬 링. 직후 C-y에 이것은 킬 링의 다른 스 니펫으로 당겨진 부분을 대체합니다.
M-w. . 킬 링에 영역을 저장합니다. 과 유사 C-w하지만 삭제하지는 않습니다.

이것은 기본적인 사용법입니다. 마크는 다른 용도로도 사용됩니다. 튜토리얼 ( C-h t)을 추천합니다 .


6
C-s C-r이 맥락에서 일반적으로 지역의 끝 / 시작을 찾기 위해 사용되는 점에 주목할 가치가 있습니다. (매크로에서 특히 유용합니다.)
ocodo

음, 아주 좋은 명령이지만 ... 표시된 영역을 선택하는 방법은 무엇입니까? 결국 나는 여전히 그것을 필요로한다. 즉, 마크 사이에 코드를 들여 쓰는 것이다.
Hi-Angel

마지막 마크와 현재의 지점 사이의 지역은 (커서가 어디 즉) 입니다 선택 영역. 그냥 실행하십시오 M-x indent-region.
Svante 2014

@Svante 아니요, 선택되지 않았습니다. (가) 있지만 indent-region잘 작동하지만 c-indent-line-or-region합니다 (바인딩하는 한, 키)를하지 않습니다. 마지막 기능은 표시된 영역이 아니라 선택한 영역, 즉 마우스로 선택한 것처럼 강조 표시된 영역에서 .
Hi-Angel

2
@YagamyLight 아, 치는 것으로 할 수 있습니다 C-Spc 마크를 두는 곳을 두 번 . 임시 표시 모드가 일시적으로 활성화됩니다 (취소 할 때까지 (사용 C-g)). 그런 다음 포인트를 이동하여 선택한 영역이 나타나는지 확인합니다.
Svante



10

이기는 하지만 C-SPC포인트가있는 곳에서 무언가를 표시하는 일반적인 방법 , 시작 / 종료 포인트로 명시 적으로 이동하지 않는 더 빠르고 쉬운 방법이 있습니다.

기본 제공 선택 단축키

  • M-h단락표시 하는 중요한 수단 . "문단"은 종종 코드 블록을 의미합니다.

  • C-M-hC-M-@- 각각 sexps 및 defuns표시 합니다. 이것은 lisps뿐만 아니라 여러 언어에서 작동합니다.

  • Shift 누르기 — 이동 중에 강조하는 또 다른 매끄러운 방법입니다. 예를 들어 M-S-f전체 단어를 앞으로 선택합니다. 이것은이며 shift-select-modeEmacs 24+에서 기본적으로 활성화되어 있습니다. 치 클릿이 아닌 일부 키보드에서는 C-S-새끼 손가락 하나로 길게 누를 수 있어야합니다 .

이 중 하나를 반복해서 눌러 선택 영역을 늘릴 수 있습니다.

(참고 : C-g실험 중 표시를 취소 하려면 자주 사용하십시오 .)

부가 기능

지역 및 사물 선택을 개선 하는 몇 가지 추가 패키지 가 있습니다. 이들은 모두 잘 어울리고 서로 다른 사용 사례에 적합합니다. 모두 사용하세요!

  • Expand-Region : 영역 확장은 선택된 영역을 의미 단위로 증가시킵니다. 원하는 것을 선택할 때까지 키를 계속 누르십시오. C-=권장되는 바인딩입니다. 필요한 것을 얻으려면 몇 번 누르십시오.

  • Easy-Kill :M-w및 니모닉을사용하여 단어, 성별, 목록 등과 같은 다양한 유형을 선택합니다.

  • Zop-to-Char : zap-to-char 와 비슷하지만 멋진 선택 및 기타 메뉴 기반 작업을 제공합니다.

  • diff-hl : 커밋되지 않은 변경된 영역을 강조 표시합니다. diff-hl-mark-hunk덩어리를 선택 / 표시하는 데사용합니다.


7

사용 Control- Space마크를 설정하고 커서를 이동합니다.

transient-mark-mode의지는 당신을 위해 선택을 강조 표시합니다. M-x transient-mark-mode .

사용자 정의를 사용하여 기본적으로이 모드를 활성화하도록 Emacs를 설정할 수 있습니다. M- x customize-option RET transient-mark-mode.


1

... 우분투를 사용하고 있고 C-spc작동하지 않는 경우 : 다음과 같이 IBus "다음 입력 방법"키 바인딩을 지워야합니다.

운영 ibus-setup"다음 입력 방법"에 대한 키 바인딩을 하고 다른 것으로 변경합니다 (또는 "..."버튼을 클릭 한 다음 "삭제"버튼을 클릭하여 완전히 삭제).

SO 질문에 대한 답변 에서 인용 한 내용입니다 .


0

Edin Salkovic의 답변을 확장하려면 CUA 모드를 사용하는 경우을 사용하여 시각적 블록 선택을 시작할 수 있습니다. CUA 문서에 설명 된 블록 선택을 제어하는 ​​바로 가기가 많이 있습니다 .


-1

Emacs 25를 사용하면 C- Space를 누른 다음 관심있는 텍스트 영역을 강조 표시하거나 선택하려는 위치로 커서를 이동합니다. 그 후에 다음 명령이 필요할 수 있습니다.

  • C- w절단 용.
  • M- w복사 용.
  • C- y붙여 넣기.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.