Vim의 자동 들여 쓰기 / 포맷 코드?


34

가능한 한 Vim을 점점 더 많이 사용하려고합니다. Vim과 Aptana와 같은 IDE 사이의 가장 큰 장점 중 하나는 자동 들여 쓰기 기능입니다.

자동 서식 코드 (HTML, CSS, PHP)가있어 제대로 들여 쓰기가 가능한 수단이 있습니까?

그렇다면 어떻게 이것을 vim에 설치합니까? 플러그인을 많이 이해하지 못합니다. 이 스레드를 검토하려고 시도했는데 vim 자동 들여 쓰기 동작을 변경하는 방법은 무엇입니까?


들여 쓰기하려는 언어를 명확하게 설명해 주시겠습니까? vim이 지원하는 경우 이미 추가 노력없이 이미 자동 들여 쓰기를해야한다고 기대합니다. 그렇지 않으면 플러그인을 얻을 수 있어야합니다.
Edd Steel

이상적으로 HTML / CSS 및 PHP
chrisjlee

답변:


53

전체 파일을 자동으로 들여 쓰려면

gg
=G

설명 :

  • gg -파일의 시작으로 이동
  • G -파일 끝으로 이동
  • =- 들여 쓰기

2
당신은 그것을 분해 할 수 있습니까? g 자체가 일반적으로 무엇입니까? 그리고 = G?
chrisjlee

편집을 참조 @ 크리스
takeshin

1
좋은 힌트입니다. 그러나 bash로 쓰레기를 처리합니다.
Sparhawk

gg=G파일을 열지 않고 쉘 에서 실행하는 방법 ?
WM

@takeshin 더 자세히 설명해 주시겠습니까, 파일에 입력해야합니까, 아니면 터미널에서 실행해야합니까
Kasun Siyambalapitiya

14

기존 코드를 자동 서식 지정하는 방법을 모르지만 코드를 작성하고 자동 들여 쓰기가 필요한 경우 :

  • :set autoindent(또는 :set ai)는 자동 들여 쓰기를 켭니다.
  • Ctrl- d코드를 들여 쓰기 (AKA outdent)
  • 들여 쓰기 할 탭 또는 공백-개인적으로 탭을 사용합니다.
  • :set tabwidth=4(또는 :set tw=4)는 탭이 코드를 들여 쓸 공백의 수를 제어합니다.
  • >>명령은 현재 줄을 들여 씁니다. 번호 앞에 접두사 4>>를 붙이면 현재 줄부터 시작하여 4 줄을 들여 씁니다.
  • 마찬가지로 <<명령은 줄을 들여 쓰지 않습니다.

나는 이것이 당신에게 좋은 시작을 제공하기를 바랍니다.


7
기존 코드를 자동으로 들여 쓰려면 ={motion}일반 모드에서 사용 하십시오. 예를 들어 =G현재 줄에서 파일 끝까지 모든 코드를 들여 씁니다. ==현재 줄을 들여 씁니다.
Edd Steel

1
또한 반드시 들여 쓰기 플러그인 (예 :로드되고 있는지 :filetype indent on)
jw013

2
tw = 4로 설정하면 TEXTWIDTH를 4
Steffen Roller

4

자동 들여 쓰기 *.sh

다음 줄을 추가하십시오. ~/.vimrc

filetype indent on
set smartindent
autocmd BufRead,BufWritePre *.sh normal gg=G

이것은 vim 또는 모든 편집기 도구를 사용한 편집에만 적용됩니까?
WM

1
~./vimrcvim 편집기에만 적용됩니다.
Rahul Patil

2

이 플러그인을 사용하면 코드에서 더 쉽게 서식을 지정할 수 있습니다. 외부 포매터를 통합하고 vim의 들여 쓰기 기능에 대체가 있습니다.

https://github.com/Chiel92/vim-autoformat

또한 서식과 들여 쓰기의 차이점에 유의하십시오. 들여 쓰기는 모든 줄 앞의 공백 만 수정하는 반면 형식은 연산자 주위의 공백과 같은 다른 항목도 처리합니다.


2

~/.vimrc파일을 작성 / 편집하고 다음 행을 추가하십시오.

set autoindent

2
이것은 기존의 답변에 아무것도 추가하지 않습니다 ...
jasonwryan

@jasonwryan 실제로 Hai Vu의 대답 :set autoindent은 현재 파일에 대해서만 자동 들여 쓰기를 가능하게합니다. .vimrc파일에 추가 하면 자동 들여 쓰기가 가능합니다.
Akshat Maheshwari

귀하의 의견은 이미 Rahul의 답변으로 언급되었으므로 게시하기 전에 생각하십시오
Indrajeet Gour

0

bash에서 나는 이것을한다 :

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

이것은 주석을 제거하고 스크립트 "bash way"를 다시 들여 씁니다. 스크립트에 HEREDOCS가 포함되어 있지만 작동하지 않으면 작동하지 않습니다.

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

모든 스크립트에서 작동하지만 전체 스크립트는 4 칸 들여 쓰기됩니다. 자유롭게 수정하되 스크립트에 내 이름을 인용하고 게시하십시오! :디


나는 이것이 문제의 요점을 놓치고 있다고 생각합니다. 일련의 줄을 들여 쓰지 않고 OP가 다양한 언어에 대해 VIM 내에서 자동 들여 쓰기를 원한다고 생각합니다. 여담으로, 당신은 직접 조금 더이를 달성 할 수 있습니다 sed: 만약 당신이 그렇게 소원 cat script_to_be_reindented.sh | sed 's#^# #g'(어, 음, SO 인하 탭과 공백을 대체하지만, 당신이 포인트를 얻을 수있다)
eacousineau

0

vim의 자동 서식 / 들여 쓰기가 잘 작동합니다. 먼저이 줄을 다음에 넣으십시오 ~/.vimrc.

filetype plugin indent on

그런 다음 vim에서 파일을 열고 다음을 입력하십시오. gg=G

( gg이동 첫 번째 줄에 커서. =. 들여 쓰기 명령을 실행 G마지막 줄에 여기에서 실행 들여 쓰기 명령을 알려줍니다.)

모든 줄이 들여 쓰기 된 것처럼 자동 서식이 실제로 나빠 보이는 경우 실행 하여 목록에 (또는 사용중인 언어가 :scriptnames있는지) 확인 .../indent/html.vim하십시오. 그렇지 않은 경우 ~/.vimrc올바른지 확인하십시오 . 또는 :filetype plugin indent onvim 명령 줄에서 실행 한 경우 파일을 다시 열어야합니다.:e

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