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
. 움직임을 보이게하는 요점은 무엇입니까? 그것은 행동을 취하는 모든 행동에 적용됩니다.