vim - Dateien, die eine bestimmte Zeichenfolge enthalten, in neuen Tabs öffnen

vim - Dateien, die eine bestimmte Zeichenfolge enthalten, in neuen Tabs öffnen

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 quickfixFenster 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 :vimgrepstattdessen 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 tstatt <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'\''`'

verwandte Informationen