Aktueller Dateiversionsverlauf in Vim?

132

Ich möchte auf aktuelle Dateien zugreifen, die ich in GVim geöffnet und dann geschlossen habe. Ich öffne und schließe GVim häufig. Ich möchte auch auf aktuelle Dateien aus früheren Sitzungen zugreifen.

Speichert GVim aktuelle Dateien irgendwo als Word und viele andere Desktop-Apps? Wie kann ich darauf zugreifen?

Mert Nuhoglu
quelle
Ähnlich wie Frage: stackoverflow.com/questions/309723/…
malgca

Antworten:

229

Zumindest Terminal Vim speichert die vorherigen zehn Dateien ~/.viminfoim Abschnitt Datemarks. Sie können verwendet werden '0, '1, '2, ... '9unter ihnen zu springen.

(Wahrscheinlich nur nützlich '0, um zur letzten Datei zurückzukehren, die Sie bearbeitet haben, es sei denn, Ihr Speicher ist stärker als meiner.)

Sie können den :browse oldfilesBefehl auch verwenden , um ein Menü mit Zahlen zu erhalten.

Sarnold
quelle
2
Wenn Sie 0- 9als Markierungen für die Navigation, verwenden Sie sie nicht manuell
Yuan
16
benutze :browse oldget file-list. und geben Sie ein, qum auszuwählen, welche Datei bearbeitet werden soll.
Songhir
5
:e #<1öffnet die letzte Datei, siehe :h c_#<.
Hotschke
: bro ol funktioniert .. aber Sie müssen viele Tasten eingeben .. zuerst, um eine Liste der Dateien zu erhalten, dann q drücken und dann eine Nummer auswählen. Ich glaube, das unten erwähnte MRU-Plugin ist viel besser: stackoverflow.com/a/3171323/4752883 Sie müssen <Leiter> f drücken und dann entweder mit hjkl oder anderen Tasten zur Datei navigieren / nach dem Dateinamen suchen. Drücken Sie dann o, enter, t oder v, um die Datei schnell unter dem Cursor zu öffnen.
Alpha_989
Ich habe eine Datei wiederhergestellt, die ich versehentlich rmmit der oben genannten Methode gelöscht habe .
Tandem
55

Der beste Weg, den ich benutze, ist

:browse oldfiles

Einfachster Weg auf vim.

andor kesselman
quelle
1
Nett! Ich habe diesen Ausdruck in meinem ~ / .vimrc als "nmap bo: alte Dateien durchsuchen <CR>" (ohne die Anführungszeichen) zugeordnet. Durch einfaches Eingeben dieser Zuordnung (bo) im Normalmodus wird dieser Befehl ausgeführt
Victoria Stuart,
45

Es gibt mru.vim , das den :MRUBefehl hinzufügt .

pmr
quelle
22

Sehr späte Antwort hier ... Erläuterung der Antwort von @sarnolds - Sie können den Dateiversionsverlauf mit dem Befehl oldfiles @see: h oldfiles oder: h viminfo anzeigen

:oldfiles 

Darüber hinaus können Sie eine fein abgestimmte Dateiverwaltung mit Ansichten und Sitzungen durchführen ... @see: h mkview und: h mksession für Einzelheiten ...

Eddie B.
quelle
4
Es ist nützlich zu wissen, wie eine Datei tatsächlich geöffnet wird, nachdem Sie die Nummer aus der Liste von kennen :oldfiles. Man kann dies interaktiv mit einem :browseBefehl tun , wie von @sarnold erklärt, aber es ist auch möglich, dies manuell zu tun, indem man verwendet, :e #<Nwobei N eine Zahl aus der oldfilesListe ist.
Krzysztof Adamski
11

Es gibt ein Schweizer Messer des File Switching CtrlP Plugins , das auch Teil von Janus Distributive ist. Es verfügt über einen :CtrlPMRUBefehl mit intelligenter Suche unter den kürzlich verwendeten Dateien.

Hinweis: CtrlP Verwaltet eine eigene Liste der zuletzt verwendeten Dateien in g:ctrlp_cache_dir."mru/cache.txt". Viminfo ( set viminfo?), das eine Liste von Dateimarkierungen enthält, wird nicht wiederverwendet . Dies ist nützlich, wenn Sie diese Liste löschen möchten.

Alexey
quelle
1
CtrlP-Oberfläche ist für vim-Benutzer nicht intuitiv? Es lohnt sich nicht, die komplizierte Benutzeroberfläche zu erlernen, um die MRU-Datei = ~ / regexp / zu finden (einfach mit perl / grep regexp ~ / _viminfo).
Mosh
Ja. Ich habe versucht zu verstehen, wie man Strg verwendet, aber MRU scheint viel einfacher zu verwenden zu sein, wenn Sie einen einfachen Satz von Dateien haben ( stackoverflow.com/a/3171323/4752883 ). In der MRU können Sie auch eine VIM-Regexp-Suche durchführen, um die benötigte Datei zu finden ...
alpha_989
9

Verwenden Sie :bro olund drücken Sie dann die Nummer, die der Datei entspricht, die Sie öffnen möchten.

nenchev
quelle
5

Mit dem CtrlP- Plugin können Sie Ihre zuletzt verwendeten Dateien sowie die Dateien im aktuellen Verzeichnis mit folgendem Befehl durchsuchen:

nnoremap <c-p> :CtrlPMixed<cr>

Dies erspart Ihnen den Aufwand, sich mit integrierten Vim-Befehlen und dem MRU-Plugin befassen zu müssen, mit denen Sie keine Fuzzy-Dateisuche durchführen können, was bei der Arbeit an größeren Projekten von entscheidender Bedeutung ist.

Andy Ray
quelle
Für diejenigen, die sich weigern, die Standardeinstellungen von Strg-P ​​funktional neu zuzuordnen: Sie können Strg-P ​​normal öffnen und mit Strg-F oder Strg-B zwischen den Modi wechseln (MRU ist einer von ihnen)
Gustavo Matias
2

Wie aus den Kommentaren hier (http://stackoverflow.com/questions/571955/undo-close-tab-in-vim) hervorgeht, ist Ihre Datei wahrscheinlich noch in einem Puffer geöffnet:

:ls " get the buffer number
:tabnew +Nbuf " where N is the buffer number

Beispielsweise können Sie den dritten Puffer in einer neuen Registerkarte erneut öffnen (verwenden Sie stattdessen: e, wenn Sie keine Registerkarten verwenden):

:tabnew +3buf
user886333
quelle
1
Ja, das funktioniert. Aber sicherlich ist es die Aufgabe eines Redakteurs, die Dinge einfach zu machen? Wenn Sie einen Befehl ausgeben, etwas visuell identifizieren, sich eine ID merken und dann einen anderen Befehl ausgeben müssen, der eine echte Zeitverschwendung für den Benutzer darstellt. Ihre Antwort ist richtig und ich meine keine Beleidigung, aber es ist keine der Killerfunktionen von Vim!
Artfulrobot
Ich hatte das gleiche Problem. hast du buffexplorer ausprobiert? Es kombiniert ls und: tabnew + Nbuf. Jetzt können Sie die Liste der Puffer öffnen und in einem neuen Tab usw. mit einem Tastendruck (o, t, v) usw. öffnen.
Alpha_989
2

Möglicherweise können Sie über die Befehlszeile auf die Liste zugreifen mit:

grep '^>' ~/.viminfo|cut -c3-|sed 's,~,'"$HOME"','

Erläuterung:

grep '^>' ~/.viminfo  #find the list of recent files
cut -c3-              #remove the first 2 characters
sed 's,~,'"$HOME"','  #replace ~ with absolute path

Sie könnten einen Bash-Alias ​​haben, wenn Sie diesen regelmäßig verwenden

alias vim_mru="grep '^>' ~/.viminfo|cut -c3-|sed 's,~,'\"$HOME\"','"
Alexx Roche
quelle
2

Das Hinzufügen meiner 2 Cent hier, weil fzf nicht zuvor erwähnt wurde, ist ein wunderbares Tool:
fzf.vim verfügt über einen :HistoryBefehl, mit dem Sie die zuletzt verwendeten Dateien unscharf durchsuchen und während der Eingabe suchen können .
Ich passe das (Standard-) Verhalten dieses Befehls an, indem ich fzf nicht zulasse, dass die Suchergebnisliste die beste Übereinstimmung aufweist: Ich möchte, dass die Reihenfolge aller übereinstimmenden Dateinamen weiterhin die Reihenfolge ist, in der diese Dateien zuletzt verwendet wurden.
Um diese Anpassung durchzuführen, habe ich Folgendes in meine .vimrc-Datei eingefügt, um den Historyvom fzf.vim-Plugin definierten Standardbefehl zu überschreiben :

    command! -bang -nargs=* History
      \ call fzf#vim#history({'options': '--no-sort'})
Emile Vrijdags
quelle
1

Ein weiteres Plugin, mit dem Sie eine Datei aus der Liste der zuletzt geänderten auswählen können, ist staritfy . Es ersetzt Ihren Startbildschirm durch eine Liste der zuletzt geänderten Dateien. Sie können diese Seite später jederzeit mit dem :StartifyBefehl öffnen .

Krzysztof Adamski
quelle
1
Startify konnte nicht einmal installiert werden - es werden mehr Dokumente zur grundlegenden Installation und Verwendung benötigt. Verwendung von MRU, da es einfach zu installieren und zu verwenden war.
Mosh
1

:ls um die letzten Dateien mit der Puffernummer in der linken Spalte aufzulisten.

Dann mach es, :b{buffer-number}um dorthin zu springen.

Beispiel: :lsZeigt eine Liste der Dateien an. Ich möchte zur drittletzten Datei springen, die ich besucht habe. :b3werde mich dorthin bringen.

Ordnen Sie für eine schnellere Suche :lsetwas zu, z. B. <Leader>.in Ihrer .vimrc-Datei.

Bryan Perez
quelle
1

Sie können auch mit ctrl+ zurückgehen O.

IvanDi
quelle