Vim Tabs

Von in vim

Vim bie­tet schwer über­schau­ba­re Mög­lich­kei­ten der Text­be­ar­bei­tung und als neu­er Benut­zer, der sich in die Welt der Betriebs­mo­di und Befehls­ein­ga­ben per Tas­ten­kom­bi­na­tio­nen wagt, sucht man ver­zwei­felt nach brauch­ba­ren Tipps, um Vims berüch­tigt fla­cher Lern­kur­ve mög­lichst rasch zu ent­kom­men. So erging es auch mir, womit ich nicht behaup­ten möch­te, mei­ne Lern­kur­ve hät­te ihren Zenit erreicht. Ange­sichts Vims Fül­le an Fea­tures hat sie sich gera­de erst nach oben zu krüm­men begon­nen.

Nun gibt es unzäh­li­ge Bei­trä­ge in min­des­tens eben­so vie­len Blogs über die sinn­vol­le Ver­wen­dung von Vim, Tuto­ri­als für Anfän­ger, Tipps für Fort­ge­schrit­te­ne und end­lo­se und (sel­ten sor­tier­te) Samm­lun­gen von Tas­ten­kom­bi­na­tio­nen. Gera­de die­se Fül­le an Infor­ma­ti­on macht es aber schwer, die wirk­lich nütz­li­chen Funk­tio­nen her­aus­zu­fil­tern, Fea­tures, die die täg­li­che Arbeit mit dem Inhalt von Datei­en tat­säch­lich erleich­tern.

Aus mei­ner per­sön­li­chen Erfah­rung mit Vim her­aus möch­te ich mei­nen Blog dazu ver­wen­den, beson­ders nütz­li­che Fea­tures vor­zu­stel­len und deren Befeh­le zusam­men­zu­tra­gen, viel­leicht kennt sie der eine oder ande­re Benut­zer noch nicht und fin­det hier wei­te­re Anre­gun­gen.

Ich ver­wen­de Vim haupt­säch­lich auf der Kon­so­le, also meis­tens, aber nicht nur, wäh­rend einer SSH-​Sitzung (eine Zeit lang ent­wi­ckel­te ich lokal auch in gVim). Längs­tens ver­miss­te ich dabei die Mög­lich­keit, meh­re­re Files visu­ell gleich­zei­tig öff­nen zu kön­nen und rasch von einem zum nächs­ten zu wech­seln. Dabei unter­stützt Vim die Dar­stel­lung meh­re­rer geöff­ne­ter Files sogar abseits von Gno­me und KDE, ent­we­der in geteil­tem “Fens­ter”, oder, und über die­ses Fea­ture möch­te ich nun berich­ten, mit­tels Kar­tei­rei­tern, oder bes­ser “Tabs”.

Bevor wir uns die Mög­lich­kei­ten und not­wen­di­gen Befeh­le genau­er anse­hen hier noch ein paar all­ge­mei­ne Gedan­ken zu den Tabs. Tabs wur­den erst in der Ver­si­on 7.0 ein­ge­führt, was aber nicht hei­ßen soll, dass Vim nicht schon zuvor mit meh­re­ren inner­halb einer Ses­si­on geöff­ne­ten Files umge­hen konn­te. Man spricht von “gepuf­fer­ten” Inhal­ten, und das ist ab Ver­si­on 5 rea­li­siert. Seit Ver­si­on 7 hat man nun eine wei­te­re Mög­lich­keit geschaf­fen, die­se geöff­ne­ten Files “optisch” dar­zu­stel­len. Tabs sind dabei nichts ande­res, als ein gra­fi­scher Hin­weis auf wei­te­re geöff­ne­te Datei­en.

Linux Ser­ver haben, um den Spei­cher­be­darf zu mini­mie­ren, in der Standard-​Installation übli­cher­wei­se eine Spar­ver­si­on von Vim instal­liert (Paket mit der Bezeich­nung “vim-​tiny” o.ä.), bzw. beinhal­ten mög­li­cher­wei­se eine älte­re Ver­si­on. Ein “vim --ver­si­on” in der Kon­so­le gibt aus­führ­li­che Aus­kunft über die der­zeit instal­lier­te Ver­si­on, bzw. ein “apt-​get install vim-​full” (selbst­ver­ständ­lich als root) hilft bei älte­ren Ver­sio­nen bzw. Spar­ver­sio­nen wei­ter.

Jetzt aber zur Pra­xis. Wer schon beim Pro­gramm­start meh­re­re Files in Tabs öff­nen möch­te, bedient sich des Para­me­ters “-p”, gefolgt von den zu öff­nen­den File­na­men (getrennt wie gewöhn­lich durch Leer­zei­chen):

vim -p file1 file2 file3

Schon star­tet Vim, liest die drei Files ein und stellt den Inhalt des ers­ten Files dar. Die bei­den ande­ren befin­den sich im Hin­ter­grund (in Vim spricht man auch von “hid­den”). Am obe­ren Bild­schirm­rand zeigt uns Vim die Namen der drei Files, den Umstän­den ent­spre­chend gra­fisch pri­mi­tiv dar­ge­stellt, in drei Tabs, wobei der ers­te Tab also aktiv ist.

Prin­zi­pi­ell muss man Vim aber bekannt­lich nicht unbe­dingt mit einem bereits vor­han­de­nen File öff­nen, zum Bei­spiel wenn man ein neu­es Text­file erstel­len möch­te. Das gilt auch für die Tabs:

vim -p5 file1 file2

… öff­net bei­spiels­wei­se 5 Tabs, wobei der ers­te Tab das File “file1” und der zwei­te Tab das File “file2” “gepuf­fert” haben. Tab 3 bis Tab 5 haben neue Text­files “geöff­net”, die jedoch noch auf kei­ner Fest­plat­te exis­tent sind.
Mit die­sen offe­nen Tabs (ohne gespei­cher­tem File) könn­te man nun ver­schie­de­ne Din­ge anstel­len. Zum Bei­spiel:

Man fügt Text ein und spei­chert den Puf­fer mit fol­gen­dem Befehl (im Kommandozeilen-​Modus) in eine Datei (aller­dings jetzt zwin­gend mit File­na­men und Beach­tung rela­ti­ver bzw. abso­lu­ter Pfad­an­ga­be):

:w file3.txt

Oder man öff­net im jewei­li­gen Tab ein bereits vor­han­de­nes File. Auch hier gibt es ver­schie­dens­te Mög­lich­kei­ten. Ich möch­te hier mei­nen per­sön­li­chen Favo­ri­ten vor­stel­len. Ein­fach ein­mal aus­pro­bie­ren:

:Exp

:Exp steht für Explo­re. Vim öff­net eine Auf­lis­tung der Files im der­zei­ti­gen Ord­ner. Mit­tels Pfeil­tas­ten lässt sich, ähn­lich dem Windows-​Explorer, im Dokumenten-​Baum navi­gie­ren, mit der Enter-​Taste kann man ein selek­tier­tes File im aktu­el­len Tab öff­nen. Wei­te­re Befeh­le ste­hen prak­ti­scher­wei­se im Sei­ten­kopf. “Netrw Direc­to­ry Lis­ting”, ein sehr net­tes Fea­ture.

Es kann aber auch sein, dass man bereits meh­re­re Files in einer Vim-​Session gepuf­fert hat und sie jetzt ger­ne in Tabs dar­stel­len möch­te. Dann hilft die­ser Befehl:

:tab ball

Und schließ­lich möch­te man zu den bereits geöff­ne­ten Tabs viel­leicht noch ein File in einem wei­te­ren Tab öff­nen (dar­in ver­steckt sich der viel­leicht bekann­te Befehl “:e(dit)”):

:tabe file1

Ab einer gewis­sen Anzahl (die in der Vim-​Konfiguration ein­ge­stellt ist) öff­nen neue Files zwar im Buf­fer, aber nicht mehr in neu­en Tabs, was durch­aus sinn­voll ist, weil irgend­wann kein Platz mehr zur Ver­fü­gung steht. Dann könn­te fol­gen­der Befehl sehr nütz­lich wer­den:

:tabs

Dadurch wird eine Lis­te aller offe­nen Files aus­ge­ge­ben. Ein “+” zeigt ver­än­der­te Files an, ein “>” deu­tet auf das der­zeit ange­zeig­te File.

Gut, jetzt haben wir unse­re Tabs erstellt, wel­chen Vor­teil kön­nen wir dar­aus zie­hen?
Grund­sätz­lich hel­fen die “Rei­ter” den Über­blick über geöff­ne­te Files zu behal­ten. Selbst­ver­ständ­lich möch­te man nun aber auch schnell zwi­schen den Rei­tern navi­gie­ren kön­nen. Hier zeigt sich eines der Pro­ble­me beim Erler­nen von Vim: Für ein und den­sel­ben Befehl exis­tie­ren oft meh­re­re mög­li­che Tas­ten­kom­bi­na­tio­nen. So kann man mit­tels :tabn zum nächs­ten und mit :tabp zum vor­her­ge­hen­den offe­nen Tab wech­seln. Das erin­nert an die Befeh­le :next und :prev bei “her­kömm­lich” gepuf­fer­ten Inhal­ten. Alles viel zu kom­pli­ziert:

Strg - Bild-auf
Strg - Bild-ab

So kann man ganz schnell zwi­schen den Tabs wech­seln, wobei vom letz­ten Tab auf den ers­ten gesprun­gen wird. Lei­der habe ich kei­nen so schnel­len Short­cut für das Sprin­gen auf den ers­ten und den letz­ten Tab gefun­den:

:tabr(ight)
:tabl(eft)

Es gibt aber noch eine wei­te­re Mög­lich­keit, die jedoch nichts für Puris­ten ist (oder für jene, die Vim nicht auf einer gra­fi­schen Ober­flä­che aus einem Kon­so­len­fens­ter her­aus geöff­net haben und denen des­we­gen kein Zei­ge­ge­rät zur Ver­fü­gung steht): per Maus­klick. Dazu muss man aller­dings die Maus­un­ter­stüt­zung inner­halb Vims akti­vie­ren:

:set mouse=a

Ich erwäh­ne auch gleich den Befehl, der den Spuk rück­gän­gig macht:

:set mouse-=a

Wenn also die Maus akti­viert wur­de, kann man Tabs mit­tels (ein­ma­li­gem!) Klick direkt selek­tie­ren. Auf­merk­sa­me wer­den das “X” im rech­ten obe­ren Eck ent­deckt haben, des­sen Funk­ti­on nicht schwer zu erra­ten ist. Übri­gens: Ein Dop­pel­klick erstellt einen neu­en, lee­ren Tab, und zwar immer links vom dop­pelt­ge­klick­ten Tab! In den GUI-​Versionen (gVim) kön­nen neue Tabs mit der Maus mit­tels Rechts­klick und anschlie­ßen­der Menü­aus­wahl geöff­net wer­den.

Ich möch­te auf den Befehl :set mouse=a nicht wei­ter ein­ge­hen, es sei jedoch erwähnt, dass sich dabei das Ver­hal­ten der Maus grund­le­gend ändert: So ver­fällt Vim beim Mar­kie­ren von Text­stel­len in den “Visual”-Modus, die Cursor-​Position kann plötz­lich mit der Maus gesetzt wer­den und das Pro­gramm zeigt ein ver­än­der­tes Ver­hal­ten beim Scrol­len. Es darf dar­über phi­lo­so­phiert wer­den, ob die Ver­wen­dung der Maus noch der Grund­idee des Pro­gramms ent­spricht. Man müss­te dann aber eigent­lich auch die Tabs hin­ter­fra­gen. Für jeman­den, der tat­säch­lich lokal auf gra­fi­scher Ober­flä­che Vim ver­wen­det, mag die Maus­un­ter­stüt­zung aber ein brauch­ba­res Fea­ture bie­ten.

Die Beschrif­tung der Tabs bie­tet zusätz­li­che Infor­ma­tio­nen über die geöff­ne­ten Files. So geben Schräg­stri­che und ein­zel­ne Buch­sta­ben Auf­schluss über den Spei­cher­ort des geöff­ne­ten Files. So könn­te die Tab-​Beschriftung /h/U/D/t/text.txt dar­auf hin­wei­sen, dass sich das ima­gi­nä­re File “text.txt” im Doku­men­ten­baum /​home/​User/​Dokumente/​textfiles/​ befin­den. Dabei ist zu beach­ten, dass sich die Ver­zeich­nis­an­ga­be auf den der­zei­tig geöff­ne­ten Ord­ner bezieht, also rela­tiv, nicht abso­lut ist. In die­sem Fall wur­de das File in Vim also aus dem Root­ver­zeich­nis /​ her­aus geöff­net.

Wei­ters erklä­ren Sym­bo­le den Buf­fer­zu­stand des jewei­li­gen Tabs: Ein “+” weißt auf eine noch nicht gespei­cher­te Ver­än­de­rung im Buf­fer, ein “-” zeigt ein schreib­ge­schütz­tes File.

Tabs schlie­ßen kann man auch über ver­schie­de­ne Befeh­le. Ich habe mich hier immer des ein­fachs­ten weil bekann­ten Befeh­les bedient:

:q

Wer mehr tip­pen möch­te, kann auch :tabc(close) ver­wen­den. Ob sich ein Tab schlie­ßen lässt oder nicht, kann von meh­re­ren Fak­to­ren abhän­gen. Am ehes­ten stol­pert man beim Schlie­ßen über ver­än­der­te Buf­fer, also Ände­run­gen, die noch nicht ins File über­nom­men wur­den. Vim ver­hin­dert hier ein Schlie­ßen, weil sonst die Ände­run­gen ver­lo­ren gin­gen, ein gän­gi­ges Fea­ture also. Brauch­bar mag viel­leicht noch fol­gen­der Befehl sein:

:tabo(nly)

Hier wer­den alle außer dem akti­ven Tab geschlos­sen. Übri­gens kann man auch bei :tabc und :tabo ein “!” anfü­gen, was offe­ne Tabs schließt, auch wenn der Buf­fer ver­än­dert wur­de, also ähn­lich dem :q!

Soviel zum Fea­ture. Die Bespre­chung wei­te­rer Befeh­le wür­de zwar der Voll­stän­dig­keit Genü­ge tun, aber dem Sinn des Arti­kels wider­spre­chen. Mit den erwähn­ten Kom­man­dos kann man Tabs in Vim sinn­voll nut­zen.

Share on Google+Share on RedditTweet about this on TwitterShare on LinkedInShare on FacebookShare on XingShare on WhatsappEmail this to someone