vim - 새 탭에서 특정 문자열이 포함된 파일 열기

vim - 새 탭에서 특정 문자열이 포함된 파일 열기

새 vim 탭에서 특정 문자열이 포함된 모든 파일을 여는 방법을 찾고 있습니다.

파일은 특정 디렉터리에 있지 않고 디렉터리 트리에 분산되어 있습니다.

이상적으로는 각 파일에서 문자열 일치 위치로 이동하고 싶습니다.

vim 내에서 실행될 수 있다면 더 좋습니다.

답변1

찾고 있는 내용은 정확히 아니지만 다음과 같이 문자열이 포함된 모든 파일을 찾을 수 있습니다.

:grep -r "string" directory

그런 다음 다음을 사용하여 결과를 찾아봅니다.

:copen

그러면 결과가 포함된 창이 열리고 quickfix목록에서 위/아래로 이동할 수 있으며 키를 눌러 <CR>새 버퍼의 일치하는 줄에 해당 파일을 로드할 수 있습니다.

그것은 grepping의 vim 방식입니다. 물론 :vimgrep대신 사용하거나 다음을 사용할 수 있습니다.그렙 플러그인아니면 그플러그인 확인. ack 플러그인에는 결과 줄을 누르는 t대신 새 탭에서 결과를 여는 기능이 있습니다 .<CR>

답변2

.vimrc 파일에 다음을 넣을 수 있습니다:

com! -nargs=+ PatternFilesToTabs call s:PatternFilesToTabs(<q-args>)

function! s:PatternFilesToTabs(pattern)
    let savelz=&lz
    let savlast=@#
    let savfile=@%
    let hash={}
    let files=[]
    sil! redir => result
    exec 'sil! grep ' . a:pattern . ' -r .'
    sil! redir end
    for line in split(result, '\n')
        if (match(line, ':\d\+:') > 0)
            let filen=substitute(line, ':.*', '', '')
            if (!has_key(hash,filen))
                let hash[filen] = 1
                let files += [ filen ]
            endif
        endif
    endfor
    for filen in files
        exec 'sil! tabedit ' . filen
        1
        sil! call search(a:pattern)
    endfor
    exec 'sil! tabp ' . len(files)
    exec 'sil! edit ' . savlast
    exec 'sil! edit ' . savfile
    let &lz=savelz
endfunction

답변3

bash 쉘에서 직접 쉘 glob 패턴 문자열이 포함된 파일을 열려면 "*backup-file.*.sh"다음 oneliner를 사용하십시오(예, 작은따옴표를 준수하는 한 find 명령을 수정할 수 있습니다)

   # in bash
   vim -c ':args `find . -type f -name '\''*backup-file.*.sh'\''`'

관련 정보