Vim’s tabbladen gebruiken als buffers

Ik heb gekeken naar de mogelijkheid om tabbladen in Vim te gebruiken (met :tabe, :tabnew, enz.) als vervanging voor mijn huidige praktijk van het hebben van veel bestanden openen in hetzelfde venster in verborgen buffers.

Ik wil dat elk afzonderlijk bestand dat ik open heb altijd op een eigen tabblad staat. Er zijn echter een aantal zaken die dit in de weg staan. Hoe los ik deze op:

  1. Als commando’s zoals gfen ^]naar een locatie in een ander bestand springen, wordt het bestand geopend in een nieuwe buffer op het huidige tabblad. Is er een manier om al dit soort commando’s het bestand in een nieuw tabblad te laten openen, of over te schakelen naar het bestaande tabblad met het bestand als het al geopend is?

  2. Bij het wisselen van buffers kan ik gebruiken
    :b <part of filename><tab>
    en het zal de namen van bestanden in bestaande buffers aanvullen. <part of filename>kan zelfs in het midden van een bestandsnaam staan ​​in plaats van in het begin. Is er een equivalent voor het wisselen van tabblad?


Antwoord 1, autoriteit 100%

Stop, stop, stop.

Dit is niet hoe de tabbladen van Vim zijn ontworpen om te worden gebruikt. Sterker nog, ze hebben een verkeerde naam. Een betere naam zou “viewport” of “layout” zijn, want dat is wat een tabblad is: het is een andere lay-out van vensters van allebestaande buffers.

Vim proberen te verslaan in 1 tab == 1 buffer is een oefening in zinloosheid. Vim weet het niet of geeft er om en het zal het niet respecteren bij alle commando’s – in het bijzonder alles dat de quickfix-buffer gebruikt (:make, :grepen :helpgrepzijn degenen die in je opkomen) zullen tabbladen graag negeren en er is niets dat je kunt doen om dat te stoppen.

In plaats daarvan:

  • :set hidden
    Als je deze set nog niet hebt, doe dat dan. Het laat vim werken zoals elke andere editor voor meerdere bestanden op de planeet. Je kunt ergens bewerkte buffers hebben die niet zichtbaar zijn in een venster.
  • Gebruik :bn, :bp, :b #, :b nameen ctrl-6om tussen buffers te schakelen. Ik hou zelf van ctrl-6(alleen schakelt het over naar de eerder gebruikte buffer, of #ctrl-6schakelt over naar buffernummer #).
  • Gebruik :lsom buffers weer te geven, of een plug-in zoals MiniBufExplof BufExplorer.

Antwoord 2, autoriteit 42%

Beetje laat voor het feest hier, maar verrast dat ik het volgende niet in deze lijst zag:

:tab sball– dit opent een nieuw tabblad voor elke open buffer.

:help switchbuf– dit regelt het bufferwisselgedrag, probeer :set switchbuf=usetab,newtab. Dit zou moeten betekenen dat u moet overschakelen naar het bestaande tabblad als de buffer open is, of dat u een nieuwe moet maken als dat niet het geval is.


Antwoord 3, autoriteit 28%

Vim :help windowverklaart de verwarring “tabs vs buffers” vrij goed.

Een buffer is de tekst in het geheugen van een bestand.
Een raam is een kijkvenster
op een buffer.
Een tabblad is een verzameling vensters.

Het openen van meerdere bestanden wordt bereikt in vim met buffers. In andere editors (bijv. notepad++) wordt dit gedaan met tabbladen, dus de naamtab in vim kan misleidend zijn.

Windowszijn bedoeld om de werkruimte te splitsen en meerdere bestanden (buffers) samen op één scherm weer te geven. In andere editors kan dit worden bereikt door meerdere GUI-vensters te openen en deze op het bureaublad te herschikken.

In deze analogie komen de tabbladenvan vim overeen met meerdere desktops, dat wil zeggen verschillende herschikkingen van vensters.

Zoals vim help: tab-pagelegt uit dat een tabpagina gebruikt kan worden, wanneer men een bestand tijdelijk wil bewerken, maar niets wil veranderen aan de huidige lay-out van vensters en buffers. In zo’n geval kan een ander tabblad worden gebruikt om dat specifieke bestand te bewerken.

Natuurlijk moet je onthouden dat het weergeven van hetzelfde bestand in veel tabbladen of vensters zou resulteren in het weergeven van dezelfde werkkopie (buffer).


Antwoord 4, autoriteit 9%

In tegenstelling tot sommige van de andere antwoorden hier, zeg ik dat je tabbladen kunt gebruiken zoals je wilt. vim is ontworpen om veelzijdig en aanpasbaar te zijn, in plaats van u te dwingen volgens vooraf gedefinieerde parameters te werken. We weten allemaal hoe graag wij programmeurs onze “ethiek” aan iedereen opdringen, dus deze prestatie is zeker een primaire functie.

<C-w>gfis het tab-equivalent van het gf-commando van buffers. <C-PageUp>en <C-PageDown>schakelen tussen tabbladen. (In Byobu werken deze twee commando’s nooit voor mij, maar ze werken buiten Byobu/tmux. Alternatieven zijn gTen gT.) <C-w>Tzal het huidige venster naar een nieuw tabblad verplaatsen.

Als je wilt dat vim indien mogelijk een bestaand tabblad gebruikt, in plaats van een dubbel tabblad te maken, voeg dan :set switchbuf=usetabtoe aan je .vimrc-bestand. U kunt newtabaan de lijst toevoegen (:set switchbuf=usetab,newtab) om QuickFix-commando’s die compileerfouten weergeven, te forceren om in afzonderlijke tabbladen te openen. Ik geef de voorkeur aan splitin plaats daarvan, waardoor de compileerfouten in een gesplitst venster worden geopend.

Als u muisondersteuning heeft ingeschakeld met :set mouse=a, kunt u de tabbladen gebruiken door erop te klikken. Er is standaard ook een knop +waarmee een nieuw tabblad wordt gemaakt.

Voor de documentatie over tabbladen typt u :help tab-pagein de normale modus. (Nadat je dat hebt gedaan, kun je oefenen met het verplaatsen van een venster naar een tabblad met behulp van <C-w>T.) Er is een lange lijst met opdrachten. Sommige venstercommando’s hebben te maken met tabbladen, dus misschien wilt u die documentatie ook bekijken via :help windows.

Toevoeging: 19-12-2013

Om meerdere bestanden in vim te openen met elk bestand op een apart tabblad, gebruik vim -p file1 file2 .... Als je net als ik bent en altijd vergeet -ptoe te voegen, kun je dit aan het einde toevoegen, omdat vim de normale ontledingsregels voor opdrachtregelopties volgt. U kunt ook een bash-alias toevoegen die vimtoewijst aan vim -p.


Antwoord 5, autoriteit 2%

Ik kwam hetzelfde probleem tegen. Ik wilde dat tabbladen als buffers zouden werken en het lukte me nooit om ze te bereiken. De oplossing waar ik uiteindelijk voor koos, was om buffers zich als tabbladen te laten gedragen!

Bekijk de plug-in genaamd Mini Buffer Explorer, eenmaal geïnstalleerd en geconfigureerd, kunt u vrijwel op dezelfde manier met buffers werken als tabbladen zonder functionaliteit te verliezen.


Antwoord 6

Dit is een antwoord voor degenen die niet bekend zijn met Vim en afkomstig zijn van andere teksteditors (in mijn geval Sublime Text).

Ik heb al deze antwoorden gelezen en het was nog steeds niet duidelijk. Als je ze genoeg doorleest, beginnen de dingen logisch te worden, maar het kostte me uren heen en weer tussen de vragen door.

Het eerste is, zoals anderen hebben uitgelegd:

Tabpagina’slijken veel op tabbladen, ze gedragen zich als tabbladen en lijken veel op tabbladen in de meeste andere GUI-editors, maar dat zijn ze niet. Ik denk dat het een slecht mentaal model is waarop in Vim is gebouwd, waardoor helaas de extra kracht die je binnen een tabblad hebt, vertroebelt.

De eerste beschrijving die ik begreep was van @crenate’s antwoordis dat ze het equivalent zijn van meerdere desktops. In dat opzicht zou je maar een paar desktops open hebben, maar in elke desktop veel GUI-vensters.

Ik zou zeggen dat ze vergelijkbaar zijn met andere editors/browsers:

  1. Tabgroeperingen
  2. Sublieme tekstwerkruimten (d.w.z. een lijst van de open bestanden die je in een project hebt)

Als je ze zo ziet, besef je de kracht ervan dat je gemakkelijk sets bestanden (buffers) kunt groeperen, b.v. uw CSS-bestanden, uw HTML-bestanden en uw JS-bestanden op verschillende tabbladen. Wat eigenlijk best geweldig is.

Andere beschrijvingen die ik verwarrend vind

Viewport

Dit slaat voor mij nergens op. Een viewport die, hoewel het een gedefinieerde woordenboektermheeft, ik alleen heb horen verwijzen naar Vim-vensters in het :help windowdoc. Viewport is geen term die ik ooit heb gehoord met betrekking tot editors zoals Sublime Text, Visual Studio, Atom, Notepad++. Ik had er zelfs nog nooit van gehoord voor Vim totdat ik begon te proberen tabbladen te gebruiken.

Als je tabbladen als meerdere desktops bekijkt, lijkt het vreemd om naar een desktop te verwijzen als een enkel venster.

Werkruimten

Dit is mogelijk logischer, de woordenboekdefinitieis:

Een geheugenopslag voor tijdelijk gebruik.

Het is dus net een plek waar je een groep buffers opslaat.

Ik klonk aanvankelijk niet als het concept van Sublime Textvan een werkruimte die is een lijst van alle bestanden die je in je project hebt geopend:

het sublieme werkruimtebestand, dat gebruikersspecifieke gegevens bevat, zoals de geopende bestanden en de wijzigingen aan elk.

Hoewel ik er meer over nadenk, is dit het eigenlijk wel eens. Als je een Vim-tabblad als een Sublime Text-project beschouwt, dan lijkt het vreemd om in elk project slechts één bestand open te hebben en tussen projecten te blijven schakelen. Daarom is het vreemd om een ​​tabblad te gebruiken om slechts één bestand te openen.

Verzameling van vensters

Het :help windowverwijst op deze manier naar tabbladen. Plus tal van andere antwoorden gebruiken hetzelfde concept. Maar totdat je weet wat een vim-venster is, heeft dat niet veel zin, zoals het bouwen van een kasteel op zand.

Zoals ik hierboven al verwees, is een vim-venster hetzelfde als een viewport en wordt stil uitstekend uitgelegd in deze linux.com artikel:

Een erg handige functie in Vim is de mogelijkheid om het zichtbare gebied tussen een of meer bestanden te splitsen, of gewoon om het venster te splitsen om twee delen van hetzelfde bestand gemakkelijker te kunnen bekijken. De Vim-documentatie verwijst hiernaar als een viewport of venster, door elkaar.

Je bent misschien al bekend met deze functie als je ooit de helpfunctie van Vim hebt gebruikt door :helponderwerp te gebruiken of door op de F1-toets te drukken. Wanneer u Help invoert, splitst Vim de viewport en opent de helpdocumentatie in de bovenste viewport, waardoor uw document open blijft in de onderste viewport.

Ik vind het vreemd dat een tabblad een verzameling vensters wordt genoemd in plaats van een verzameling buffers. Maar ik denk dat je twee aparte tabbladen kunt openen, elk met meerdere vensters die allemaal naar dezelfde buffer wijzen, tenminste dat is wat ik tot nu toe begrijp.


Antwoord 7

Kijken naar
:help-tabbladen
het ziet er niet naar uit dat vim wil werken zoals jij doet…

Buffers worden gedeeld tussen tabbladen, dus het lijkt niet mogelijk om een ​​bepaalde buffer te vergrendelen zodat deze alleen op een bepaald tabblad verschijnt.

Het is echter een goed idee.

U kunt waarschijnlijk het gewenste effect krijgen door een terminal te gebruiken die tabbladen ondersteunt, zoals multi-gnome-terminal, en vervolgens vim-instanties op elk terminaltabblad uit te voeren. Maar niet perfect…


Antwoord 8

  • Je kunt opdrachten toewijzen die normaal gesproken buffers manipuleren om tabbladen te manipuleren, zoals ik heb gedaan met gf in mijn .vimrc:

    map gf :tabe <cfile><CR>
    

    Ik weet zeker dat je hetzelfde kunt doen met [^

  • Ik denk dat vim dit (nog) niet ondersteunt voor tabbladen. Ik gebruik gt en gT om respectievelijk naar de volgende en vorige tabbladen te gaan. U kunt ook Ngt gebruiken, waarbij N het tabbladnummer is. Een ergernis die ik heb, is dat het tabbladnummer standaard niet wordt weergegeven in de tabregel. Om dit op te lossen, heb ik een paar functies aan het einde van mijn .vimrc-bestandgeplaatst (ik heb hier niet geplakt omdat het lang is en niet correct is geformatteerd).


Antwoord 9

Ik gebruik buffers zoals tabbladen, met de plug-in BufExploreren een paar macro’s:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>
" gz in command mode closes the current buffer
map gz :bdelete<cr>
" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

Met BufExplorer hebt u geen tabbladbalk bovenaan, maar aan de andere kant slaat het op uw scherm op, plus u kunt een oneindig aantal bestanden / buffers openen en de bufferlijst is doorzoekbaar …


Antwoord 10

Als u buffers wilt werken zoals tabbladen, bekijk dan de tabline plug-in .

die een enkel venster gebruikt en voegt een regel bovenaan toe om de tabbladen te simuleren (alleen de lijst met buffers weergeeft). Dit kwam lang uit wanneer tabbladen alleen werden ondersteund in Gvim, maar niet in de opdrachtregel Vim. Omdat het alleen met buffers werkt, integreert alles goed met de rest van VIM.

Other episodes