vim - abre arquivos contendo uma string específica em novas abas

1

Estou procurando uma maneira de abrir todos os arquivos que contenham uma string específica em novas guias do vim.

Os arquivos não estão em um diretório específico, mas estão espalhados em uma árvore de diretórios.

Idealmente, quero pular para a posição da correspondência de string em cada arquivo.

Melhor ainda se puder ser executado dentro do vim

    
por ppp 05.06.2013 / 15:44

3 respostas

2

não é exatamente o que você está procurando, mas você pode encontrar todos os arquivos que contenham sua string da seguinte forma:

:grep -r "string" directory

e, em seguida, navegue pelos resultados usando:

:copen

que abre uma janela quickfix contendo os resultados e, em seguida, você pode subir / descer na lista e pressionar <CR> para carregar o arquivo na linha correspondente em um novo buffer.

É a maneira vim do grepping. É claro que você pode usar :vimgrep ou usar o plug-in Grep ou o plug-in do Ack . O plug-in ack tem um recurso para abrir o resultado em uma nova guia, se você pressionar t em vez de <CR> em uma linha de resultado.

    
por 05.06.2013 / 18:25
2

Você pode colocar o seguinte em seu arquivo .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
    
por 06.06.2013 / 00:13
0

Para abrir os arquivos contendo "*backup-file.*.sh" shell padrão de seqüência de caracteres de linha diretamente do bash shell, use o seguinte oneliner (sim, você poderia modificar o comando find contanto que obedeça às citações individuais

   # in bash
   vim -c ':args 'find . -type f -name '\''*backup-file.*.sh'\''''
    
por 27.05.2017 / 23:29

Tags