[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
.
시각적 선택을 사용하면 선택한 선의 형식 만 지정합니다.
시각적 선택없이 전체 파일 형식을 지정합니다.