grep -n의 결과를 감안할 때 특정 라인에서 vim을 어떻게 열 수 있습니까? (키보드 만 사용)


9

내가 실행 grep "keyword" -n하고 다음 결과 목록을 얻을 때 :

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

찾은 줄에서 파일 중 하나 (예 : 두 번째 목록)를 열려면 어떻게해야합니까?

이제 마우스를 사용하여 출력을 복사 한 후 복사 한 vim다음 +복사 한 줄 번호 를 추가 합니다. ( vim a/b/c +70파일 이름을 얻기 위해 마우스 사본을 사용하고 줄 번호를 얻기 위해 다른 마우스 사본을 사용 한다는 것을 의미합니다 ( 또는 짧으면 손으로 직접 복사하십시오))

키보드 단축키로 할 수있는 방법이 있습니까?


다음과 같은 것을 시도해 볼 수 있습니다 echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset..
Arkadiusz Drabczyk

2
또한 Vim을보다 효율적으로 사용하려면 전용 Vi 및 Vim Stack Exchange 사이트를 확인하십시오.
muru December

답변:


14

두가지:

  1. Vim은을 지원합니다 grep.

    Vim을 열고 do를 실행 :grep keyword ...하면 Vim 은 빠른 수정 사항 목록 을 결과로 채우고 첫 번째 파일로 이동합니다. 그런 다음 (및 다른 명령) 을 사용하여 n 번째 퀵 픽스 항목으로 이동할 수 있습니다 :cc n.

  2. grep의 출력을 사용하여 위에서 언급 한 빠른 수정 사항 목록을 채울 수 있습니다.

    vim -q <(grep -n keyword ...)
    

    그런 다음 위에서 언급 한 빠른 수정 탐색 명령을 사용하십시오.

grep의 출력을 수동으로 처리하는 것보다 간단합니다.

(2)의 대안으로 다음과 같이 Vim을 열 필요가 없다고 생각되면 grep의 출력을 파일에 저장하고 대신 해당 파일을 사용할 수 있습니다.

grep ... | tee log
vim -q log

git status에서 같은 방법을 사용하려고 시도하지 않음 :(-vim -q <(git status | grep modified)
CIsForCookies

3
@CIsForCookies grep -n( <filename>:<line>: ...) 와 같은 형식이 아닙니다 . Git 용 임시 플러그인 을 사용한 다음 문제가 발생 :Gstatus하여 원하는 파일로 이동하고 Enter 키를 누릅니다.
muru December

BTW, ~ / .bashrc grep alias 를 편집 하여 항상 색상을 사용했고 어떤 이유로 든 -q >()옵션을 깨뜨 렸습니다 .
CIsForCookies

2

@muru가 대답 한 것처럼 grep을 이미 지원하지 않으면 그렇게 할 수 있습니다.

:cexpr system("grep -n keyword")

git grep예를 들어 다른 명령과 함께 사용할 수 있습니다 .

또한 버퍼에서 출력을 열고 "cbuffer"를 사용할 수 있습니다.

이에 대한 매뉴얼의 quickfix 섹션을 참조하십시오 .

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