Schließen Sie die Registerkarte "Schließen" in Vim

77

Ich schließe einen Tab in vim und stelle sofort fest, dass ich ihn für etwas erneut öffnen muss. Gibt es eine Möglichkeit, das Schließen der Registerkarte in Vim 7.2 rückgängig zu machen?

Amjith
quelle
Kann dies auf vi.stackexchange.com verschoben werden?
Sukima
Hallo, dieses Vimscript und das Fensterlayout-Plugin erledigen den Job: Es öffnet die Registerkarte, die Sie gerade geschlossen haben, erneut und bringt das Fensterlayout zurück, das Sie hatten.
Yann Thomas-Gérard

Antworten:

11

Ich verwende ein MRU-Plugin (zuletzt verwendete Dateien) . So kann ich die letzten 30 Dateien bearbeiten, die ich gerade bearbeitet habe

Hier sind die Metadaten des MRU-Plugins:

File: mru.vim
Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
Version: 3.2   Last Modified:
September 22, 2008

Verwendung

Zum Auflisten und Bearbeiten von Dateien aus der MRU-Liste können Sie den Befehl ": MRU" verwenden. Der Befehl ": MRU" zeigt die MRU-Dateiliste in einem temporären Vim-Fenster an. Wenn das MRU-Fenster bereits geöffnet ist, wird die im Fenster angezeigte MRU-Liste aktualisiert.

Oli
quelle
5
Können Sie die grundlegende Verwendung zusammenfassen?
Ciro Santilli 法轮功 冠状 病 六四 事件 24
Ich verstehe diese Antwort nicht ... Es sieht so aus, als würde die Verwendung eines Plugins empfohlen?
Martin Tournoij
@Carpetsmoker Ja, es ist: mru.vim.
Trusktr
Dies ist nicht so nützlich, wenn Sie gerade 10 Dateien in Registerkarten geöffnet, zu einer der mittleren Dateien gewechselt und diese dann geschlossen haben, da die MRU die letzten 10 geöffneten Dateien nur in der Reihenfolge anzeigt, in der sie geöffnet wurden, und natürlich hätten Sie mehr und mehr öffnen können
Verlieren
140

Ihre Datei ist wahrscheinlich noch in einem Puffer geöffnet:

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

So öffnen Sie den Puffer 18 erneut:

:tabnew +18buf
grau verblassen
quelle
5
:tabnew Nhat bei mir nicht funktioniert. Was ich tue ist :tabnewund :bNwo N die Puffernummer ist
alf
@alfonso: Bei dem Befehl ist :tabnew +NbufN die Puffernummer . Es muss ein + vorangestellt und mit dem Wort "buf" versehen werden.
Greyfade
5
Ein Beispiel dafür, was @greyfade bedeutete:tabnew +18buf
Eric Hu
3
Sie könnten sogar tun: vsp + [bufferNumber] buf hat mir geholfen, den geschlossenen Split in meinem vim wieder zu öffnen
3emad
4
Der Grund, warum dies nicht funktioniert, ist, dass +es sich um eine Zeilenreferenz handelt, NICHT um eine Pufferreferenz, die #nicht +wie in verwendet wird :tabe #5, um Puffer 5 in einer neuen Registerkarte zu öffnen.
Sukima
31
:tabnew#

Öffnet die kürzlich geschlossene Datei in einem neuen Tab erneut


Bearbeiten : Bitte verwenden Sie die Antwort von greyfade. Ich mag meine Antwort nicht, aber ich behalte sie hier für Referenzen und nützliche Kommentarinformationen.

konyak
quelle
Seltsam, scheint, als hätte es zuerst funktioniert, jetzt öffnet es nicht verwandte Puffer.
#ist die zuletzt bearbeitete Datei im aktuellen Fenster. Durch das Schließen einer Registerkarte wird die Datei nicht als Alternative registriert ( #). Sie müssen es nach :ls
Puffernummer
Es funktioniert mehr als perfekt, wenn Sie splitorientiert sind.
Al.G.
Fehleraufforderung: "E194: Kein alternativer Dateiname als Ersatz für '#'"
Scott Yang
6

Einfache Antwort ist nein, es ist nichts eingebaut.

Eine praktikable Lösung wäre jedoch die Verwendung eines Plug- Ins wie dem hervorragenden BufExplorer . Da standardmäßig zuerst die zuletzt verwendeten Puffer aufgelistet werden, ist das erneute Öffnen einer geschlossenen Registerkarte so einfach wie das Drücken\bet

Ben Hoffstein
quelle
Wie von Lucia erwähnt, müssen Sie zuerst nach unten gehen, <leader>be<Down>tdamit es funktioniert.
Ciro Santilli 法轮功 冠状 病 六四 事件 24
1

Verwenden Sie das Plug-In Ben Suggested: BufExplorer Github Mirror

In seiner Antwort müsste man drücken <Leader>be<Down>t. Hinzufügen einer kleinen Verknüpfung:

map <silent><leader>t <leader>be<Down>t

Das würde also einfach <leader>tdie Arbeit machen.

Lucia
quelle
1

Wenn es ein BufferCloseEreignis gäbe, wäre dies einfach ... aber es scheint, dass es nicht möglich ist, da es für die Fenstererstellung nicht möglich ist .

Bei Registerkarten können wir jedoch feststellen, ob eine Registerkarte geschlossen wurde, indem wir die Anzahl der Registerkarten beibehalten und die Differenz zwischen TabLeaveund zählen TabEnter.

Verwendung: <leader>trÖffnet die zuletzt geschlossene Registerkarte auf einer neuen Registerkarte erneut (vorausgesetzt, die Registerkarte hatte nur einen einzigen Puffer):

let g:reopenbuf = expand('%:p')
function! ReopenLastTabLeave()
  let g:lastbuf = expand('%:p')
  let g:lasttabcount = tabpagenr('$')
endfunction
function! ReopenLastTabEnter()
  if tabpagenr('$') < g:lasttabcount
    let g:reopenbuf = g:lastbuf
  endif
endfunction
function! ReopenLastTab()
  tabnew
  execute 'buffer' . g:reopenbuf
endfunction
augroup ReopenLastTab
  autocmd!
  autocmd TabLeave * call ReopenLastTabLeave()
  autocmd TabEnter * call ReopenLastTabEnter()
augroup END
" Tab Restore
nnoremap <leader>tr :call ReopenLastTab()<CR>
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle