Vim에서 모든 줄의 들여 쓰기를 수정하는 명령은 무엇입니까?
종종 코드를 복사하여 원격 터미널에 붙여 넣고 모든 것을 엉망으로 만듭니다. 한 번 에이 문제를 해결하고 싶습니다.
Vim에서 모든 줄의 들여 쓰기를 수정하는 명령은 무엇입니까?
종종 코드를 복사하여 원격 터미널에 붙여 넣고 모든 것을 엉망으로 만듭니다. 한 번 에이 문제를 해결하고 싶습니다.
답변:
=indent 명령은 동작을 수행 할 수 있습니다. 따라서 gg, 파일의 시작을 얻기 위해 =, 들여 쓰기 G, 파일의 끝에 gg=G.
''(작은 따옴표 두 개)는 gg=G''들여 쓰기를해야하는 곳으로 되돌아갑니다.
터미널에 붙여 넣기 전에 시도한 :set paste다음:set nopaste 작업을 완료 한 후. 그러면 자동 들여 쓰기, 줄 바꿈 및 붙여 넣기를 방해하는 기타 기능이 꺼집니다.
편집 : 또한 =들여 쓰기 보다 훨씬 좋은 결과 는 일반적으로 외부 프로그램을 사용하여 얻을 수 있음을 지적해야합니다 . 예를 들어, 나는 :%!perltidy항상 달려 있습니다. astyle, cindent등도 사용할 수 있습니다. 물론 파일 유형에 따라 이들을 키 스트로크에 매핑하고 다른 키 스트로크를 동일한 키 스트로크에 매핑 할 수 있습니다.
equalprg위해 외부 필터를 사용하도록 ftplugin 에서 옵션을 설정할 수 있습니다 =.
formatpgm단정하고 스타일과 함께 사용 gq합니다. 여기 내에서 몇 가지 예입니다 .vimrc: au FileType xml set fp=tidy\ -q\ -i\ -xml와au FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
코드를 입력하지 않고 현재 블록을 다시 들여 쓰려면 다음을 수행하십시오.
[[=]]
=aB커서를 전혀 움직이지 않는 것을 사용할 수도 있습니다 .
[[=]]에서는 5 개의 코드가 필요합니다.
탈출을 누른 다음 아래 조합을 빠르게 입력하십시오.
gg=G
1G=G. 파일의 모든 줄을 들여 쓰기해야합니다. 1G첫 줄 을 가져 =오고 자동 들여 쓰기를 시작 G하고 마지막 줄은 파일의 마지막 줄을 가져옵니다.
1gg=G
복잡한 C ++ 파일의 경우 vim의 =필터 명령을 사용할 때 vim이 항상 형식을 올바르게 지정하지는 않습니다 . 따라서 이러한 상황에서는 astyle (또는 uncrustify ) 과 같은 외부 C ++ 포맷터를 사용하는 것이 좋습니다 .
:%!astyle
Vim의 '='함수는 기본적으로 내부 포맷터를 사용하지만 (항상 올바르게 작동하지는 않음) 이 질문 에서 설명한대로 적절하게 설정하여 astyle과 같은 외부 포맷터를 사용하도록 설정할 수도 있습니다 .
XML 파일의 경우이 명령을 사용합니다
:1,$!xmllint --format --recover - 2>/dev/null
xmllint가 설치되어 있어야합니다 (package libxml2-utils).
(출처 : http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html )
이를 위해 맵핑을 작성할 수 있습니다.
이 파일은 전체 파일을 자동으로 들여 쓰기하고 커서를 현재 위치에 유지합니다.
nmap <leader>ai mzgg=G`z
vim에서 시각 모드로 이동하고 =을 선택한 후 위 아래 줄을 선택하면 선택한 모든 줄이 들여 쓰기됩니다.
ggvG=당신이 할 수 있습니다 gg=G. 움직임을 보이게하는 요점은 무엇입니까? 그것은 행동을 취하는 모든 행동에 적용됩니다.