![vim - abre arquivos contendo uma string específica em novas abas](https://rvso.com/image/1365800/vim%20-%20abre%20arquivos%20contendo%20uma%20string%20espec%C3%ADfica%20em%20novas%20abas.png)
Estou procurando uma maneira de abrir todos os arquivos que contêm uma string específica em novas guias do vim.
Os arquivos não estão em um diretório específico, mas espalhados por 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
Responder1
não é exatamente o que você está procurando, mas você pode encontrar todos os arquivos que contêm sua string da seguinte maneira:
:grep -r "string" directory
e navegue pelos resultados usando:
:copen
que abre uma quickfix
janela contendo os resultados, e então você pode subir/descer na lista e pressionar <CR>
para carregar esse arquivo na linha correspondente em um novo buffer.
É a maneira vim de fazer grep. Claro, você pode usar :vimgrep
em vez disso ou usar oPlug-in Grepou oPlug-in de confirmação. O plugin ack possui um recurso para abrir o resultado em uma nova aba, se você pressionar t
em vez de <CR>
uma linha de resultado.
Responder2
Você poderia 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
Responder3
Para abrir os arquivos contendo "*backup-file.*.sh"
a string do padrão glob do shell diretamente do shell bash use o seguinte oneliner (sim, você poderia modificar o comando find contanto que obedecesse às aspas simples
# in bash
vim -c ':args `find . -type f -name '\''*backup-file.*.sh'\''`'