2010-07-10 7 views
33

나는 수백 개의 TTL (TeraTermLanguage) 파일이 들어있는 폴더가 있습니다. 이제 모든 파일을 들여 씁니다.폴더의 모든 파일로 VIM에 들여 쓰기

들여 쓰기 용으로 teraterm.vim을 만들었으며 VIM을 사용하여 파일을 열고 "gg = G"를 실행하면 전체 파일의 들여 쓰기가 올바르게됩니다.

그러나 폴더에있는 모든 파일을 들여 쓸 수있는 방법이 있습니다.

저는 Shell의 도움으로하고 싶었습니다. 하지만 VIM에서는 VIM에 인수로 파일 들여 쓰기 명령을 전달할 수 없었습니다.

VIM의 모든 파일에 들여 쓰기를 수행하는 가장 좋은 방법을 제안하십시오.

+0

이것은 다소 혼란 스럽습니다 ... Shell을 사용하고 있습니까? bash와 같은 것을 사용하고 있다면 (아래 암페어 머신의 답변을 사용) 다음이 작동해야합니다. * .ttl * TTL에있는 파일의 경우 ; vim -s indentme.src $ file;을 수행하십시오. done – skeept

답변

57

bash 명령 줄에서 vim을 스크립팅하는 것보다 훨씬 간단한 방법은 vim 내부에서 vimscript를 사용하는 것입니다 (또는 명령 줄에서 vim을 스크립팅하는 데 훨씬 간단한 한 줄짜리 도구 일 수도 있습니다). 개인적으로 모든 다중 파일 조작에 arg 목록을 사용하는 것을 선호합니다. 예를 들어 :

:args ~/src/myproject/**/*.ttl | argdo execute "normal gg=G" | update 
  • args 와일드 카드를 사용하여 아글리스트를 설정하는 다음
  • | 우리가 한 줄
  • argdo에 여러 개의 명령을 실행할 수 있습니다 실행됩니다 (**은 현재 디렉토리뿐만 아니라 하위 디렉토리와 일치합니다) 각 arg에 대한 명령 (두 번째를 삼킨다. |)
  • execute 다음 파이프를 삼키지 않도록 normal을 막는다.
  • normal
  • update:w 같다 (당신이 첫 번째 장소에서 작업을하고 있었는지)하지만, 버퍼가 수정 된 경우에만이 저장 다음 정상 모드 명령을 실행합니다.

:args ... | argdo ... | update 패턴 (예를 들어, 검색 및 %s/foo/bar/ge 또는 균일 한 fileformat을 설정하거나 fileencoding를 통해 교체) 프로젝트 전체 파일 조작의 모든 종류의 매우 유용합니다.

은 (다른 사람들은 버퍼 목록 및 :bufdo를 사용하여 유사한 패턴을 선호하지만 인수 목록과 나는 현재의 버퍼 또는 개방 새로운 정력 세션을 닫는에 대해 걱정할 필요가 없습니다.) 나는 떨어져 갔다

+0

감사합니다 Nicholas, 이것은 단순히하는 좋은 방법입니다. 또한 이것은 다른 많은 경우에 매우 유용합니다. 스크립트를 사용하여 수행 할 수 있었지만 훨씬 빠릅니다. 글쎄, 나는 수정해야했던 약 900 개의 파일이있다. 필자가 직면 한 문제는 파일 이름으로 화면을 채울 때마다 스페이스 바를 눌러야 만 다음 파일 세트를 차지할 수 있다는 것입니다. – hari

+5

당신의 방식대로 진행된다면, "- 더 많은 -"프롬프트를 피하고 모든 화면에 ': 침묵하는'자유 주의적 적용을 피할 수 있어야합니다. 예 : ': argdo 자동 실행 "normal gg = G"| 자동 업데이트 ' –

+1

+1과 @ nicholasa.evans 나는 그 주석의 내용을 실제 응답으로 옮기거나 복사 할 것이다. (그러나 그것은 나다.) – CoatedMoose

11

터미널을여십시오. 유형 :

다음
$ vim -w indentme.scr foo.c 

입력이 정확하게 (명령 모드) :

gg=G:wq 

indentme.scr라는 빔 스크립트 파일의 모든 라인을 들여 쓰기의 과정을 절약 정력을 닫습니다.

참고 :indentme.scr 입력 한 모든 키 명령의 기록을 포함, 그래서 당신이 파일을 들여 쓰기를 할 때이 이어질 것입니다 때문에, 파일을 바라 볼 화살표 키를 사용하여 많은 시간을 소비하지 않습니다 훨씬 더 큰 스크립트로 처리하고 배치 작업을 심각하게 느리게 만듭니다.

자, 바로 다음 명령을 입력 파일의 모든 라인을 들여 쓰기 위해 :

$ vim -s indentme.scr unindented-file.c 

빔 당신은 빠른 컴퓨터를 사용하는 거대한를 편집하지 않은 경우 (오픈 차단을 깜박 파일), 모든 줄 들여 쓰기, 파일을 적절한 위치에 저장.

불행하게도,이 한 번에 하나 개의 파일에 작동하지만 당신은 쉽게 shfor 루프를 사용하여 기능을 확장 할 수 있습니다 :

for filename in *.ttl ; do 
    vim -s indentme.scr "$filename" 
done 

참고 :을이 저장 오버합니다 모든 파일. ~/.vimrcset bk이 없으면 백업을 저장할 필요가 없습니다.

2

암페타민의 해법. 그러나 여러 디렉터리를 반복적으로 검색해야했습니다. 여기에 내가 사용한 솔루션이 있습니다.

$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \; 
0

위의 대답에서 언급 한 내용을 참고하여이 부분을 완성하겠습니다. 초심자가 이해할 수 있도록 처음부터 시작하겠습니다.

스텝 1 는 터미널을 열고 다음 명령을 사용하여 astyle (서식 사용 툴)을 설치한다. 유형 :

sudo apt-get install astyle 

스텝 2가 확인 당신이 정력 당신의 system.Run에 설치되어 있는지 코드 파일이 우리가 실행하려는 스크립트를 생성합니다 명령 아래 자리에 서있는 디렉토리에서 아래 명령 재귀 수 있도록합니다 (위의 답변에서 언급 한 바와 같이)

vim -w indentme.scr foo.c 

단계-3 그리고 정확하게 (명령 모드에서)이을 입력합니다. 우리의 디렉토리에 각각의 모든 파일을 아름답게하고 Enter 키를 누릅니다

,
:%!astyle 

스텝 4 그런 다음 정확히 입력은 키를 누릅니다 (명령 모드에서) 다음 명령이 반복적으로

:wq 

스텝 5 마지막 실행을 입력

find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \; 

모든 cpp 파일의 형식이 올바로 지정됩니다.