vim: abre archivos que contienen una cadena específica en pestañas nuevas

vim: abre archivos que contienen una cadena específica en pestañas nuevas

Estoy buscando una manera de abrir todos los archivos que contienen una cadena específica en nuevas pestañas de vim.

Los archivos no están en un directorio específico, sino que están dispersos en un árbol de directorios.

Lo ideal sería saltar a la posición de la cadena coincidente en cada archivo.

Aún mejor si se puede ejecutar desde vim

Respuesta1

no es exactamente lo que estás buscando, pero puedes encontrar todos los archivos que contienen tu cadena de la siguiente manera:

:grep -r "string" directory

y luego explore los resultados usando:

:copen

eso abre una quickfixventana que contiene los resultados, y luego puede subir/bajar en la lista y presionar <CR>para cargar ese archivo en la línea coincidente en un nuevo búfer.

Es la forma viva de grepping. Por supuesto, puedes usar :vimgrepen su lugar, o usar elcomplemento grepo elComplemento de confirmación. El complemento ACK tiene una función para abrir el resultado en una nueva pestaña, si presiona ten lugar de <CR>en una línea de resultado.

Respuesta2

Podrías poner lo siguiente en tu archivo .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

Respuesta3

Para abrir los archivos que contienen "*backup-file.*.sh"una cadena de patrón global de shell directamente desde el shell bash, use la siguiente línea (sí, puede modificar el comando de búsqueda siempre que obedezca las comillas simples

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

información relacionada