
Ich suche nach einer Möglichkeit, alle Dateien, die eine bestimmte Zeichenfolge enthalten, in neuen Vim-Tabs zu öffnen.
Die Dateien liegen nicht in einem bestimmten Verzeichnis, sondern sind über einen Verzeichnisbaum verstreut.
Idealerweise möchte ich in jeder Datei zur Position der Zeichenfolgenübereinstimmung springen.
Noch besser, wenn es innerhalb von vim ausgeführt werden kann
Antwort1
es ist nicht genau das, was Sie suchen, aber Sie können alle Dateien, die Ihren String enthalten, wie folgt finden:
:grep -r "string" directory
und durchsuchen Sie dann die Ergebnisse mit:
:copen
Dadurch wird ein quickfix
Fenster mit den Ergebnissen geöffnet. Anschließend können Sie in der Liste nach oben/unten navigieren und drücken, <CR>
um die Datei in der übereinstimmenden Zeile in einem neuen Puffer zu laden.
Dies ist die vim-Methode zum Greppen. Natürlich können Sie :vimgrep
stattdessen auch verwenden oderGrep-Pluginoder derBestätigungs-PluginDas ACK-Plugin verfügt über eine Funktion, um das Ergebnis in einem neuen Tab zu öffnen, wenn Sie t
statt <CR>
auf eine Ergebniszeile drücken.
Antwort2
Sie könnten Folgendes in Ihre .vimrc-Datei einfügen:
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
Antwort3
Um die Dateien, die "*backup-file.*.sh"
den Shell-Glob-Musterstring enthalten, direkt aus der Bash-Shell zu öffnen, verwenden Sie den folgenden Oneliner (ja, Sie können den Find-Befehl ändern, solange Sie die einfachen Anführungszeichen beachten
# in bash
vim -c ':args `find . -type f -name '\''*backup-file.*.sh'\''`'