[vim] Vim에서 2 칸 들여 쓰기를 4 칸 들여 쓰기로 변경

인터넷에서 복사 한 코드 중 2 칸 들여 쓰기가 있는데 4 칸 들여 쓰기로 변경하고 싶습니다. vim 스크립트를 작성하지 않고도 작업을 수행 할 수있는 짧은 vim 루틴이 있는지 궁금합니다. 다음은 현재 HTML 파일로 수행하는 방법입니다.

  • 매크로 기록
  • 줄의 시작으로 이동
  • “<“가 처음 나타날 때까지 모든 공백을 시각적으로 선택합니다.
  • 모든 공백을 양크하여 붙여 넣습니다 (기본적으로 두 배로 지정).
  • 파일 끝까지 매크로 재생

간단히 말해서 qa0vt<yp<esc>jq

함정 :

빈 줄 또는 “<“로 시작하지 않는 줄에 대해 매크로가 실패합니다. 이 솔루션을 비 HTML 파일로 확장하는 방법을 모릅니다.



답변

들여 쓰기를 변경하는 일반적인 방법은 탭 중지를 변경하는 것입니다.

파일을 빈 버퍼에 붙여 넣은 다음 :

:set ts=2 sts=2 noet
:retab!

이것은 2 개의 공백마다 TAB 문자로 변경됩니다.

:set ts=4 sts=4 et
:retab

이렇게하면 모든 TAB이 4 개의 공백으로 변경됩니다.

이 방법의 장점은 다른 방법으로도 사용할 수 있다는 것입니다. 예를 들어 4 칸에서 2 칸으로 변환 할 수 있습니다.


답변

:set shiftwidth=4및 으로 가능할 수 있습니다 gg=G.


답변

내가하는 일은 esneider 및 cforbish의 접근 방식과 매우 유사하지만 입력하는 것이 조금 더 빠릅니다.

:%s/^\s*/&&

단순히 선행 공백 (공백 또는 탭)을 선행 공백의 두 배로 바꿉니다 ( &일치하는 표현식으로 대체 됨).


답변

다음 정규식을 사용했습니다 (선행 공백 수를 두 배로 늘림).

%s;^\(\s\+\);\=repeat(' ', len(submatch(0))*2);g


답변

이것은 매우 오래된 질문이지만 모든 답변이 잘못되었습니다 … Vim은 전체 파일을 다시 들여 쓰는 매우 쉬운 방법을 제공합니다. 나는 그것을하기 위해 내 자신의 기능을 작성한 후에 이것을 배웠으므로 동일한 무지 보트에 있습니다.)

유형

gg=G

이것은 당신이 원하는대로 tabstop을 설정했다고 가정합니다. (OP의 경우 ts = 4가 될 것입니다)

http://vim.wikia.com/wiki/Fix_indentation 에서 이것을 배웠습니다.

일반 모드에서 gg = G를 입력하면 전체 파일이 다시 들여 쓰기됩니다. 이것은 특별한 경우입니다. = 연산자입니다. d 또는 y와 마찬가지로 커서 동작 명령으로 이동하는 모든 텍스트에 적용됩니다. 이 경우 gg는 커서를 첫 번째 줄에 놓고 = G는 현재 커서 위치에서 버퍼 끝까지 다시 들여 씁니다.


답변

cforbish의 답변과 비슷하지만 (다소 더 간단합니다)이 정규식은 선행 공백을 복제합니다.

:%s/^\( \+\)/\1\1

또는이 다른 정규식을 사용하여 2 개의 공백을 4 개의 공백으로 변환하여 단일 공백 ​​(및 일반적으로 홀수)을 보존 할 수 있습니다.

:%s/^\(\(  \)\+\)/\1\1

그건,

  • 1 칸 ⇢ 1 칸
  • 2 대 ⇢ 4 대
  • 3 대 ⇢ 5 대
  • 4 대 ⇢ 8 대


답변

@spro의 답변 외에도 이것을 내 .vimrc

command! -range=% Format :<line1>,<line2>s/^\s*/&&

그냥 입력하십시오 :Format.

시각적 선택을 사용하면 선택한 선의 형식 만 지정합니다.

시각적 선택없이 전체 파일 형식을 지정합니다.