![vim: abre archivos que contienen una cadena específica en pestañas nuevas](https://rvso.com/image/1365800/vim%3A%20abre%20archivos%20que%20contienen%20una%20cadena%20espec%C3%ADfica%20en%20pesta%C3%B1as%20nuevas.png)
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 quickfix
ventana 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 :vimgrep
en 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 t
en 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'\''`'