2011-07-29 4 views
1

보통 나는 find -type f | xargs grep 'something'을 수행하고 Vim에서 해당 파일을 열려고합니다. 무슨 일이 일어나고, 나는 Vim 세션을 닫고 열어야 만하고 때로는 결과를 잃어 버렸을 때 find 연산을 다시해야한다. Vim에서 이러한 작업을 자동화하는 방법이 있습니까? Vim에서 이러한 모든 파일을 별도의 버퍼로 열어서 원활하게 전환 할 수있게할까요? Vim 내에서 find 명령을 실행할 수 있는지 (! 사용) 찾고 버퍼로로드합니다.명령을 통해 얻은 파일 집합을 Vim 버퍼에로드하십시오.

위와 같은 상황에있는 다른 트릭을 사용 하시겠습니까?

답변

2

Vim에는 Grep 기능을 통합하고 구현하는 몇 가지 명령이 있습니다 ( :help grep 참조). 두 가지 주요한 것들은 :grep:vimgrep입니다. 이전 은 외부 Grep 프로그램 (grepprg 옵션으로 설정)을 사용하는 반면 후자는 Vim 자체에서 구현 된 핵심 Grep 기능을 사용합니다.

:vimgrep의 주요 장점은 Vim 정규식 구문과 이식성이며 ** glob 와일드 카드를 포함합니다. :vimgrep 명령 은 확장 된 glob 패턴의 서브 세트를 이해합니다 (:help wildcard 참조). 이 은 대부분의 경우에 find 명령을 피할 수 있습니다. :vimgrep을 사용하면 예제 검색은 다음과 같이 보입니다. 쉘 또는 grepprg** 와일드 카드를 구현하는 경우

:vimgrep /something/ **/* 

같은 검색, :grep 명령을 수행 할 수 있습니다. 다음은 Zsh 확장 된 글로브 표기법을 보여주는 예입니다.

:grep 'something' **/*(.) 

이러한 명령 (및 변형)의 두

은 QuickFix 목록 및 윈도우 로컬 버전, 위치 목록 ( :help quickfix 참조)라고 빔 인터페이스 기능 을 사용합니다. QuickFix 창은 하나 또는 여러 개의 파일과 관련된 모든 검색 결과의 종류를 포함하는 특수 읽기 전용 버퍼입니다. 검색 결과 Grep 명령으로 수집 된 은 즉시 QuickFix 창에 집계됩니다.

QuickFix리스트 하여 한 줄을 검색 패턴의 각각의 정합 위치를 나타내며, 이러한 신속 라인 입력 눌러간에 전환 할 수있다. QuickFix 목록과 관련된 몇 가지 명령은 없습니다. 여기에 그 중 일부만 시작점으로 표시되어 있습니다 (자세한 내용은 도움을 참조).

  • :cw 또는 :cope은 QuickFix 창을 (그들 사이의 차이를 이해하는 데 도움을 참조)을 엽니 다.
  • :cc, :cn, :cp은 각각 현재 일치 항목, 다음 항목 및 이전 일치 항목을 목록에 표시합니다.
  • :cr, :cla 목록의 첫 번째 일치 항목과 마지막 일치 항목은 각각 입니다.
  • :ccl은 QuickFix 창을 닫습니다.

위치 목록은 특정 창에 첨부 된 QuickFix 목록입니다. 각 창 에는 하나의 위치 목록이 첨부되어있을 수 있습니다 (다른 창 위치 목록과 QuickFix 목록과 별도로). 위에 나열된 QuickFix 목록 명령 은 위치 목록과 동일한 기능을 수행합니다.

  • :lw 또는 :lop 현재 윈도우와 연관된 위치리스트를 연다.
  • :ll, :lne, :lp은 각각 현재 일치 항목, 다음 항목 및 이전 일치 항목을 목록에 표시합니다.
  • :lr, :lla 목록의 첫 번째 일치 항목과 마지막 일치 항목은 각각 입니다.
  • :lcl은 위치 목록을 닫습니다. :grep:vimgrep 명령

위치 목록 대응은 각각 :lgrep:lvimgrep이다.

+0

어떻게 파일을 차례로 탐색 하시겠습니까? –

+0

자세한 답변을 보내 주셔서 감사합니다. 매우 감사! 나는 구글을 사용하여 매뉴얼을 둘러 보았으나, 이것들을 이끌어 낼 수 없었다. 고맙습니다. –

+0

@ Seenthil : 대개의 경우': cn',': cp' 명령 또는 QuickFix 목록 자체를 사용하여 대개 일치하는 항목을 탐색 할 수 있습니다. –

0

외부 프로그램에 의해 생성 된 파일 목록을 열려면 한 단계 더 쉽게 수행 할 수 있습니다 : find -type f | xargs grep -l 'something' | xargs vim 각 파일을 별도의 버퍼로로드합니다.

+0

그리고': n'과': N'을 사용하여 일치하는 파일 사이를 전환하십시오. 그러나 파일에서 패턴이 일치하는 특정 위치 사이를 이동하려면 반복해서 검색해야합니다. –

관련 문제