Vi에서 전체 파일의 들여 쓰기를 어떻게 수정합니까?


625

Vim에서 모든 줄의 들여 쓰기를 수정하는 명령은 무엇입니까?

종종 코드를 복사하여 원격 터미널에 붙여 넣고 모든 것을 엉망으로 만듭니다. 한 번 에이 문제를 해결하고 싶습니다.



8
예방은 치료보다 낫습니다. 그 정신에는이 의견이옵니다. 삽입 모드로 들어가고 원격 터미널에서 코드를 붙여 넣기 전에 ": set paste"를 수행하십시오.
Chthonic Project

답변:


1215

=indent 명령은 동작을 수행 할 수 있습니다. 따라서 gg, 파일의 시작을 얻기 위해 =, 들여 쓰기 G, 파일의 끝에 gg=G.


39
나는 나의 소중한 1G를 풀지 못할 것입니다 =) 내가 가장 좋아하는 것 중 하나는 여는 괄호에 서있는 = %입니다. 전체 블록의 들여 쓰기를 수정합니다.
PEZ

2
: 0 <return>은 나쁘지 않지만 gg는 좋습니다. (yeah, ed first first)
Erik Olson

8
현재 줄을 떠나지 않고 전체 파일을 들여 쓸 수 있습니까?
Fábio Perez

86
@ Fábio : ''(작은 따옴표 두 개)는 gg=G''들여 쓰기를해야하는 곳으로 되돌아갑니다.
Nemo157

@ArchimedesTrajano Mac OS의 주식 vim은 매우 오래되었습니다. HomeBrew의 버전을 추천합니다. 훨씬 더 최신입니다. Mac의 vim과 관련하여 성가신 문제가있었습니다. 또한 내장 된 것을 망쳐서는 안된다는 말을 들었으므로 매우 조심하지 않으면 직접 업데이트하지 마십시오.
AlexMA

126

터미널에 붙여 넣기 전에 시도한 :set paste다음:set nopaste 작업을 완료 한 후. 그러면 자동 들여 쓰기, 줄 바꿈 및 붙여 넣기를 방해하는 기타 기능이 꺼집니다.

편집 : 또한 =들여 쓰기 보다 훨씬 좋은 결과 는 일반적으로 외부 프로그램을 사용하여 얻을 수 있음을 지적해야합니다 . 예를 들어, 나는 :%!perltidy항상 달려 있습니다. astyle, cindent등도 사용할 수 있습니다. 물론 파일 유형에 따라 이들을 키 스트로크에 매핑하고 다른 키 스트로크를 동일한 키 스트로크에 매핑 할 수 있습니다.


5
사용자 정의 키 바인딩 대신 들여 쓰기를 equalprg위해 외부 필터를 사용하도록 ftplugin 에서 옵션을 설정할 수 있습니다 =.
Josh Lee

pastetoggle 키 바인딩 옵션도 있습니다. : pt pt \ p를 눌러 모드 간 전환
michael

참고 : grml의 vimconfig에서 pastetoggle 키는 F11
Thomas

나는 formatpgm단정하고 스타일과 함께 사용 gq합니다. 여기 내에서 몇 가지 예입니다 .vimrc: au FileType xml set fp=tidy\ -q\ -i\ -xmlau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
라피 Khatchadourian

이것을 읽고 난 후에 perltidy를 다운로드하면, 기본 vim 자동 들여 쓰기보다 훨씬 낫습니다
Joey Ciechanowicz

29

코드를 입력하지 않고 현재 블록을 다시 들여 쓰려면 다음을 수행하십시오.

[[=]]

1
이것을 되살려 서 미안하지만 화음의 의미는 무엇입니까? 조정?
John P

7
여기서 "코드"는 하나의 키를 누른 상태에서 다른 키를 누른 상태에서 실행되는 명령을 나타냅니다. 음악 코드와 유사하게 한 번에 여러 음이 들렸습니다. 따라서 G는 shift + g이고 ^]는 ctrl +]입니다. 단일 키 바인딩보다 입력 시간이 오래 걸립니다.
Ralph Giles

=aB커서를 전혀 움직이지 않는 것을 사용할 수도 있습니다 .
amin

7
북유럽 키보드 [[=]]에서는 5 개의 코드가 필요합니다.
k4kuz0

29

모든 명령의 주인은

gg=G

이것은 전체 파일을 들여 쓰기합니다!

그리고 아래는 Vim 또는 gVim에서 신속하게 줄을 들여 쓰는 데 사용되는 간단하고 우아한 명령 중 일부입니다.

현재 줄 아래의 모든 줄을 들여 쓰려면

=G

현재 줄을 들여 쓰려면

==

n현재 줄 아래의 줄 을 들여 쓰려면

n==

예를 들어 현재 줄 아래에 4 줄을 들여 쓰기

4==

코드 블록을 들여 쓰려면 중괄호 중 하나로 이동하여 명령을 사용하십시오.

=%

17

깔끔한 응용 프로그램 / 유틸리티를 사용하여 HTML 및 XML 파일을 들여 쓰기 할 수 있으며 해당 파일을 들여 쓰기하는 데 매우 효과적입니다.

XML 파일을 확인

:!tidy -mi -xml %

HTML 파일을 확인하십시오

:!tidy -mi -html %

16

탈출을 누른 다음 아래 조합을 빠르게 입력하십시오.

gg=G

28
나는 천천히 입력, 당신은 다음에 무슨 일이 있었는지 믿지 않을 것입니다.
k0pernikus

방금 답변과 의견을 공감했습니다. lol @ k0pernikus
gglasses

12

1G=G. 파일의 모든 줄을 들여 쓰기해야합니다. 1G첫 줄 을 가져 =오고 자동 들여 쓰기를 시작 G하고 마지막 줄은 파일의 마지막 줄을 가져옵니다.


또는 심지어1gg=G
Biggybi

1G = G가 해결했습니다. 대박!
Natus Drew

8

:set paste퍼티를 사용하고 창 사이에 코드를 복사하는 친구입니다. 나는에 켜져되기 전에 :set paste(과 :set nopaste) 복사 / 붙여 넣기 내가 바로 그 이유에 맞는했다.


1
예, 퍼티도 사용하고 있습니다. : set paste is awesome
mmcdole

7

Vim에서을 사용하십시오 :insert. 이렇게하면 모든 서식이 유지되고 자동 들여 쓰기가 수행되지 않습니다. 자세한 내용은 help :insert.


7

:set paste, 가운데 클릭, 을 사용하지 않으려면 set nopaste클립 보드의 내용을 붙여 넣을 수도 있습니다.

"*p
"+p

그렇게하면 일반 모드를 벗어날 필요가 없습니다. 붙여 넣기를해야 +하거나 *텍스트를 선택한 방법에 따라 다른 경우를 참조하십시오 :help quoteplus.


4

vim- autoformat은 언어에 맞는 외부 프로그램 (예 : Ruby 파일의 경우 "rbeautify"gem, JavaScript의 경우 "js-beautify"npm 패키지)을 사용하여 소스 파일을 포맷합니다.


3

복잡한 C ++ 파일의 경우 vim의 =필터 명령을 사용할 때 vim이 항상 형식을 올바르게 지정하지는 않습니다 . 따라서 이러한 상황에서는 astyle (또는 uncrustify ) 과 같은 외부 C ++ 포맷터를 사용하는 것이 좋습니다 .

:%!astyle

Vim의 '='함수는 기본적으로 내부 포맷터를 사용하지만 (항상 올바르게 작동하지는 않음) 이 질문 에서 설명한대로 적절하게 설정하여 astyle과 같은 외부 포맷터를 사용하도록 설정할 수도 있습니다 .



1

이를 위해 맵핑을 작성할 수 있습니다.

이 파일은 전체 파일을 자동으로 들여 쓰기하고 커서를 현재 위치에 유지합니다.

nmap <leader>ai mzgg=G`z

0

vi 편집기의 경우 : insert를 사용하십시오. 이렇게하면 모든 형식이 유지되고 자동 들여 쓰기가 삽입되지 않습니다. 한 번 끝내기를 누르면 실제 형식의 파일을 볼 수 있습니다. 그렇지 않으면 가비지 문자가 표시됩니다. ^ 예 :

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}

0

vim에서 시각 모드로 이동하고 =을 선택한 후 위 아래 줄을 선택하면 선택한 모든 줄이 들여 쓰기됩니다.


나는 이것을 피할 것이다. 시각 모드는 동작에 대해 잘 모르는 경우에 사용됩니다. 문자 세트를 캡처하는 방법을 알고 있으면 시각 모드로 넘어가는 추가 단계가 필요하지 않습니다. 왜 ggvG=당신이 할 수 있습니다 gg=G. 움직임을 보이게하는 요점은 무엇입니까? 그것은 행동을 취하는 모든 행동에 적용됩니다.
alextes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.