vim : 여러 줄의 처음 2 개 공백 삭제


79

VIM을 사용하여 각 줄의 처음 2 개 공백을 삭제하는 가장 쉬운 방법은 무엇입니까? 기본적으로 각 줄에 대해 "2x"를 반복합니다.

설명 : 여기에서 처음 두 문자가 공백이라고 가정합니다. 따라서 문제는 여러 줄을 함께 들여 쓰기하는 것입니다.


구체적으로 공백입니까, 아니면 처음 두 문자입니까?
Jason Down

처음 두 글자입니다. 처음 두 문자가 공백이라고 가정합니다.
twimo

전 편집기 모드에서 검색 및 바꾸기를 통해 수행하는 방법을 보여주었습니다. 한 가지 방법은 두 개의 공백으로 시작하는 행에 대해서만 수행하도록 보장합니다 (두 개의 공백 만 제거). 다른 하나는 그들이 무엇인지에 관계없이 처음 두 문자를 배팅합니다.
Jason Down

Vim 질문은 SO에 대한 주제에서 벗어난 것이 아닙니다 (메타에 대한 토론 확인 및 ... SO FAQ). 또한 들여 쓰기 입니다 ... 개발 관련
루크 Hermitte

답변:


93

더 많은 옵션. "가장 쉬운 방법"을 결정할 수 있습니다.

모든 줄의 처음 2자를 제거합니다.

:%normal 2x

공백 인 경우에만 모든 줄의 처음 2자를 제거합니다.

:%s/^  /

마지막 슬래시는 선택 사항이며 두 개의 공백을 볼 수 있도록 여기에만 있습니다. 슬래시 없이는 :.

모든 줄에 대해 들여 쓰기를 왼쪽으로 이동 :

:%normal <<

11
Vim에는 30 가지 다른 방법이 있습니다. 이와 같은 질문은 당신이 전혀 알지 못했던 것들을 불러옵니다. 나는 % normal에 대해 전혀 몰랐습니다.
Jason Down

마지막 대시에 대한 설명에 감사드립니다. 도움이됩니다.
ryanjdillon 2014 년

1
%기호는 단순히 "현재 행이 아닌 문서의 각 행에 대해이 명령을 실행"을 의미 한다고 덧붙일 것입니다 . 나는 생각한다. 그것에 대한 많은 문서를 찾을 수 없습니다.
Sammaron

119
  1. Ctrl-V(또는 붙여 넣기에 Ctrl-Q사용 Ctrl-V하는 경우) 시각적 블록 모드로 들어갑니다 .
  2. 화살표로 삭제할 영역을 선택하십시오.
  3. 그런 다음를 눌러 d선택한 영역을 삭제합니다.
  4. 프레스 Esc

7
ctrl-v를 눌러 제거 할 문자를 선택한 다음 d를 잘라냅니다.
Henrik K

2
최고 별표 답변! :-)
Nikos Alexandris

이것은 내가 사용하는 모든 vim에서 작동하지 않지만 작동하는 경우 매우 편리하고 실제로 삭제하기 전에 삭제하려는 영역을 시각화 할 수 있다는 것이 좋습니다.
searchengine27

시각적 블록 모드에 대한 다른 기본 바인딩은 아마도? 이전 유닉스 배포 VI (VIM과 반대) 간의 차이 일 수 있습니다.
Tom Kerr

이것은 아마도 가장 쉽고 현명한 대답 일 것입니다.
Willem van Ketwich

13

검색 및 바꾸기를 사용할 수도 있습니다 (ex 편집기에서 :문자 를 통해 액세스 ).

무엇이든지 처음 두 문자를 제거하십시오.

%s/^.\{2}//

처음 두 개의 공백 문자를 제거합니다 (처음에 있어야하고 둘 다 공백이어야합니다 ... 해당 기준과 일치하지 않는 행은 건너 뜁니다).

%s/^\s\{2}//

2
끝에있는 / g는 불필요합니다. 한 줄에 한 번만 일치합니다.
bhinesley

imo 이것은 훌륭한 솔루션입니다
Victoria Stuart

7

을 가정하고 shiftwidth=2다음 범위로 시프트를 사용합니다.%

:%<

4

두 개의 공백 또는 두 개의 문자? ( 2x후자를 수행합니다.)

:[range]s/^  //

각 줄의 시작 부분에서 두 개의 공백을 삭제합니다. 전체 파일에 대해이 작업을 수행하는 것처럼 %(과 동일)을 사용 하십시오.1,$[range]

:[range]s/^..//

각 줄의 처음 두 문자를 삭제합니다. ( 반드시 두 개의 열이 아닌 두 개의 문자를 삭제합니다 . 탭 문자는 하나의 문자로 계산됩니다).

실제로 수행중인 작업이 들여 쓰기를 변경하는 경우 <명령을 사용하여 줄이거 나 >명령을 사용하여 늘릴 수 있습니다. shiftwidth이동 거리를 제어하도록 설정 합니다. 예 :

:set shiftwidth=2

3

두 가지 접근 방식 중 하나를 시도합니다.

  1. Ctrl+V(종종에 매핑 됨 Ctrl+Q)을 사용하여 삭제할 블록에서 열 편집을 수행합니다 .
  2. q1(또는 기록 레지스터를 표시하려는 다른 숫자 / 문자)를 사용하여 첫 번째 행에 매크로를 기록한 다음 @1(이전 예제를 사용하려면) 해당 매크로를 여러 번 재생합니다 . 더 좋은 방법은 앞의 숫자를 사용하여 실행 시간- 10@1예를 들어 매크로를 10 번 실행하지만 기록한 내용에 따라 다릅니다 . 관련이있는 경우 커서를 되감 0거나 한 줄을 드롭 j해야합니다.

3

또한 추가 할 사항 : vim에 대한 들여 쓰기를 구성하는 방법을 배우십시오. 그러면 간단한 gg=G것이 트릭을 할 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.