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
cforbish의 답변과 비슷하지만 (다소 더 간단합니다)이 정규식은 선행 공백을 복제합니다.
:%s/^\( \+\)/\1\1
또는이 다른 정규식을 사용하여 2 개의 공백을 4 개의 공백으로 변환하여 단일 공백 (및 일반적으로 홀수)을 보존 할 수 있습니다.
:%s/^\(\( \)\+\)/\1\1
그건,
- 1 칸 ⇢ 1 칸
- 2 대 ⇢ 4 대
- 3 대 ⇢ 5 대
- 4 대 ⇢ 8 대
이것은 매우 오래된 질문이지만 모든 답변이 잘못되었습니다 ... Vim은 전체 파일을 다시 들여 쓰는 매우 쉬운 방법을 제공합니다. 나는 그것을하기 위해 내 자신의 기능을 작성한 후에 이것을 배웠으므로 나는 같은 무지 보트에 있습니다.)
유형
gg=G
이것은 당신이 원하는대로 tabstop을 설정했다고 가정합니다 (OP의 경우 ts = 4가 될 것입니다)
http://vim.wikia.com/wiki/Fix_indentation 에서 이것을 배웠습니다.
일반 모드에서 gg = G를 입력하면 전체 파일이 다시 들여 쓰기됩니다. 이것은 특별한 경우입니다. = 연산자입니다. d 또는 y와 마찬가지로 커서 동작 명령으로 이동하는 모든 텍스트에 적용됩니다. 이 경우 gg는 커서를 첫 번째 줄에 놓고 = G는 현재 커서 위치에서 버퍼 끝까지 다시 들여 씁니다.
이것은 정규식 기반 답변의 변형입니다.
I have a bash script in my local bin directory that will double the amount of whitespace at the start of a line. Input can be stdin or a file:
$ cat ~/bin/dblsp
#!/bin/bash
file=${1--}
while IFS= read -r line; do
echo "$line" | sed 's/\s*/&&/'
done < <(cat -- "$file")
I use this within vim by visually selecting a line and issuing the following command:
:'<,'>!dblsp
This saves me the need to type (or remember) the regex.
I also use it in maps like the following:
nnoremap <leader>] `[V`]!dblsp<CR>
which will apply it to a block of recently pasted text. I usually use the following map to paste rather than :set paste
nnoremap <leader>p :r !xclip -o<CR>
My usual workflow is:
- select code snippet (eg the example code on this page is 2 spaces but I want 4)
- paste code snippet (,p)
- change spacing (,])
or simply changing the indent on yanked blocks pasted from another buffer.
In addition to @spro's answer, I put this in my .vimrc
command! -range=% Format :<line1>,<line2>s/^\s*/&&
Just type :Format
.
With visual selection, this only formats the selected lines.
Without visual selection, this formats the whole file.
참고URL : https://stackoverflow.com/questions/16888658/change-2-space-indent-to-4-space-in-vim
'code' 카테고리의 다른 글
Ubuntu-오류 : SD 카드를 만들지 못했습니다. (0) | 2020.09.20 |
---|---|
CHM 파일을 열면 "웹 페이지 탐색이 취소되었습니다."가 생성됩니다. (0) | 2020.09.20 |
선택 옵션에서 체크 박스를 사용하는 방법 (0) | 2020.09.20 |
Scala 특성에서 val 또는 def를 언제 사용합니까? (0) | 2020.09.19 |
root 사용자를 제외하고 'test'@ 'localhost'사용자 (암호 사용 : YES)에 대한 액세스가 거부되었습니다. (0) | 2020.09.19 |