2013-08-16 12 views
8

Bei einem großen und mittelgroßen Projekt habe ich oft viele Splits auf meinem Bildschirm und mehrere Tabs, die jeweils 5-6 Splits geöffnet haben. Normalerweise verwende ich verschiedene Registerkarten für verschiedene Verzeichnisse und logische Arbeitsbereiche, um die Arbeit an Feature A von der Arbeit an Feature B oder Bug C und meinen Notizen zu trennen.Splits Verwaltung in Vim

enter image description here

diesen Wahnsinn verwalten wird zu einem Problem, wenn Sie eine Menge zusätzlicher Aufteilungen von Plugins wie NERDTree, Ausbrecher, Gundo und viele andere, die zusätzliche Splits nehmen mögen. Nach dem Öffnen und Schließen eines solchen Helper-Splits ändert sich die gesamte Einstellung in der Höhe und Breite. Ich meine, einige Fenster zu klein geworden, werden einige größer, als sie waren anfangs (und ich habe manuell ihre Höhe und Breite mit CTRL+W > und CTRL+W < und Freunde einzustellen.

Normalerweise ist es schneller zu tun, jede Spaltung mit der Maus die Größe, aber es ist nicht einmal in der Nähe der Vim Art.

Manchmal möchte ich sogar einige Splits austauschen oder auf Split nach rechts weitergehen .. CTRL+W HJKL nicht immer helfen, wie sie Splits zu weit kickt und Größen wieder verzerren .. Rotation CTRL+W r funktioniert nur auf einfache Fälle

Wie verwalten Sie viele Puffer, Splits und Tabs?

Bearbeiten: Ich sehe, es gibt Stimmen für das Schließen. Die Frage mag Ihnen zu allgemein erscheinen, deshalb gibt es eine konkretere Frage: Was ist ein guter Arbeitsablauf beim Arbeiten mit vielen Puffern und Splits? (Eine der Antworten ist es, Splits zu fördern, um Tabulatoren zu trennen, wenn mehr Platz benötigt wird)

+0

'Ctrl' + 'W'' = '(oder'^w = ') wird mehr oder weniger gleichmäßig verteilen machen spaltet. Könnten Sie Ihre Frage präzisieren - wonach genau suchen Sie? – guessimtoolate

+0

Ich suche nach einer Möglichkeit, die Größe meines Splits nicht jedes Mal zu zerlegen, wenn sich ein kleiner Spalt öffnet/schließt oder ein einfacher Weg, sie entsprechend der Puffergröße zu skalieren. Eine andere Sache könnte ein Plugin oder etwas sein, um die Neuordnung von Splits zu erleichtern. – imslavko

Antwort

13

Ich benutze Splits nur, wenn ich wirklich zwei Dateien nebeneinander haben muss (weil man als Referenz verwendet wird, normalerweise HTML - CSS zum Beispiel). Ansonsten verwende ich nur normale Puffer, die in einem einzigen Fenster geladen sind. Ich benutze auch keinen Nerdtree oder irgendetwas, das zu viel Platz einnehmen würde.

Ich versuche zu vermeiden, zwischen den Dateien zu navigieren: Tags sind ein viel besserer Weg zu gehen.

Mein vim ist eigentlich immer ein großes graues Rechteck.

EDIT

Arbeiten mit mehreren "Dinge" ist ein schwieriges Problem zu behandeln gewesen. Mehr noch, wenn wir versuchen, mit vielen dieser "Dinge" gleichzeitig und im selben Raum umzugehen. Es ist ein schweres Problem, weil wir nicht in der Lage sind, gleichzeitig mit mehreren Dingen umzugehen. Unser Verstand ist dafür nicht optimiert. Deshalb ist das Memory-Spiel nicht so einfach, wie es aussieht, warum wir uns nach einer Powerpoint-Diashow voller Listen und Graphen nicht daran erinnern können, warum Menschen mit einem Telefon in der einen Hand und ihrem Treibrad in der anderen Hand sterben. Da wir nicht gleichzeitig an 4 Puffern arbeiten können, sollten geteilte Fenster für Situationen reserviert werden, in denen die eigentliche Arbeit in einem Fenster ausgeführt wird und das andere Fenster als Referenz verwendet wird (Dokumentation, ein HTML-Dokument, wenn ...) macht CSS ...) oder für Feedback (Linting, Berechnungsergebnisse ...).In solch einem Setup ist der einzige Teil des Körpers, der zum anderen Fenster wechselt, unsere Augen: Wir brauchen keine Tastaturkürzel oder die Maus.

Aber wir lieben es, unser Leben komplizierter als nötig zu machen. Wir lieben es, uns selbst als Multitasking-Götter zu betrachten, also teilen wir Fenster, wir setzen Fenster in Fenster in Fenster und wir müssen zerbrechliche Hacks finden, um dieses Chaos zu managen. Tastaturkürzel sind aus verschiedenen Gründen keine gültige Lösung und wir hassen die Maus, oder?

Wie auch immer, das Grundproblem bei geteilten Fenstern ist das gleiche wie bei normalen Puffern und Tabs: Um mit Puffer # 3 arbeiten zu können, müssen wir zu Puffer # 3 wechseln. Ob der Puffer # 3 ausgeblendet ist, im rechten oberen Fenster oder in einem anderen Tab angezeigt wird, ist irrelevant, wir müssen ein paar Tasten drücken, um dorthin zu gelangen. Wenn der Zielpuffer ausgeblendet ist, wird :b3 angezeigt. Wenn es im oberen rechten Fenster ist, spielen wir mit <C-w>… Zuordnungen, Standard oder benutzerdefiniert. Wenn es in einer anderen Registerkarte ist, tendieren wir dazu, gt zu tun, bis wir es finden (oder :sb3, die viel klüger ist). Egal für welches räumliche Setup wir uns entscheiden, wir müssen immer noch zum Ziel wechseln.

Ein Problem, das nur die Art des Layouts betrifft, das Sie verwenden, ist, dass Sie denken und sich in zwei Dimensionen bewegen müssen. Das Springen vom unteren linken Fenster zum rechten oberen Fenster ist nicht wirklich linear (es sei denn, Sie verwenden <C-w>w) und erfordert viel mehr Denken und Tippen als einfach nur ein Blick auf dieses Fenster.

Ein weiteres Problem ist die Aufteilung des Arbeitsbereichs und die Auswirkungen auf die Anzahl der Puffer und die Größe der Fenster.

Alles in allem ist meiner Meinung nach der beste Weg, mit mehreren Puffern umzugehen, Fenster und Tabs in Ruhe zu lassen und einen schlankeren Workflow zu finden.

Regelmäßige Puffer können auch knifflig sein: Die Art, wie Sie eine 1,2,5,7 Liste haben können, ist auf ihre Art seltsam. Aber ich glaube, dass das Buffer-Switching (im Gegensatz zur Fensterumschaltung) grundsätzlich intuitiver und solider ist.

Das folgende Mapping macht Switching-Puffer ein Kinderspiel, aber Sie können auch die vielen verfügbaren Puffer-Switching-Plugins ausprobieren.

nnoremap gb :buffers<CR>:b<Space> 

Meine bevorzugte Navigationsmethode ist jedoch nicht pufferbasiert. Heutzutage finde ich es viel einfacher, tatsächlich zu vergessen die Dateistruktur des Projekts alle zusammen und Tags verwenden. Wenn ich herum navigiere, bewege ich mich zu einer bestimmten Klasse oder einer bestimmten Methode oder einem bestimmten Array oder was auch immer. Mein Arbeitsbereich ist nur ein Fenster, das einen von 15 oder 20 Puffern anzeigt und ich habe keinen NERDTree, keine Tabs, keinen MiniBufExplorer, keine TagList ... da der Wechsel zu einem anderen Puffer mindestens ein paar Tastendrücke erfordert, sehe ich keinen gültigen Grund zum Schneiden und Würfeln meines Arbeitsbereichs.

Da ich mich nicht in eine Ecke mit ausgefallenen überkomplizierten Gymmos versetze, muss ich nicht meine wertvolle Zeit verschwenden, um Workarounds zu umgehen, und ich kann unbeschwert über die neuesten Batch-Image-Makros lachen. Warte, ich meinte "arbeiten".

+0

Das ist eine ausgezeichnete Richtung: Workflow ohne Spaltungen, aber mit vielen Punkten. Danke für diese Antwort. – imslavko

+0

Haben Sie Kommentare zur Verwaltung von Puffern? ': ls' ist immer voll mit Puffern und es braucht Zeit, um visuell die Anzahl der benötigten Puffer zu finden. 'CTRL + 6' hilft aber trotzdem. – imslavko

+0

Bitte sehen Sie meine Bearbeitung. – romainl

3

Versuchen Sie ctrl-w <N> >, die Größe von N auf einmal zu ändern. Falls du das noch nicht machst.

Ich selbst bevorzuge lieber Zeug in Tabs statt. Und ctrl-w shift-t, um eine Teilung in eine separate Registerkarte zu verschieben.

+0

Ich wusste von ctrl-w n>, aber es fühlt sich albern an, zu erraten oder zu zählen, wie viele Schichten man benötigt, um einen Split "ein bisschen" zu erweitern. 'ctrl-w shift-t' - sieht aus wie ein tolles Zeug! Vielen Dank! – imslavko

+0

Ich neige dazu, um 10 zu ändern, dann sehen und vielleicht durch andere 10 oder 20 ändern und das ist normalerweise darüber. – aragaer

6

Splits oder Fenster, wie sie normalerweise genannt werden, sind fragile.

  • Wenn Sie einen Puffer löschen, sind die anderen Puffer nicht betroffen.
  • Wenn Sie eine Registerkarte schließen, sind die anderen Registerkarten nicht betroffen.
  • Wenn Sie ein Fenster schließen, wird Ihr gesamtes Fensterlayout in unvorhersehbarer Weise durcheinander gebracht, was eine langwierige Neuanordnung erfordert (was in Vim schwierig und unbequem ist), immer wieder.

Daher würde ich von einem Arbeitsablauf um Fenster in Vim raten.

Mein Tipp: Halten Sie die Anzahl der Fenster in der aktuellen Registerkarte klein. Verwenden Sie Fenster konzentriert und nur für bestimmte Zwecke (Blick auf verschiedene Teile einer Datei, Diff Dateien, Header/Implementierungsdateien, ...). Verwenden Sie Registerkarten für Arbeitsbereiche. Holen Sie sich bequem mit den vielen anderen Mitteln zum Navigieren Puffer: die Pufferliste, :find und die :edit Familie, Fuzzy-Finder Plug-in, die Datei Entdecker etc.

+0

Danke für diese Antwort! Ich habe total etwas vergessen, das Lernen von Puffern vs Windows vs Tabs. Jetzt weiß ich, dass Splits nur für bestimmte Anwendungsfälle gut sind und nicht für die manuelle Verwaltung von mehr als 3 Puffern geeignet sind. – imslavko

0

Wie wäre es mehr GNU screen oder tmux mit? Nur Windows in vim wird dir nicht viel helfen, genauso wie du nur mehr Konsolen verwendest.

Mit Bildschirm können Sie Sitzungen auch in vim mit :mks speichern.

Und in vim Rebind ctrl+w,h/j/k/l zu nur ctrl+h/j/k/l! Auch Shortcuts für maximales vertikales Maximieren, horizontales Maximieren und gleichgroße Fenstergröße helfen. Zur Größenanpassung habe ich auch Shortcuts, aber meistens arbeite ich mit Fullsizing/Resizing alles, Window Management ist nicht die beste Eigenschaft von Vim, ohne Maus ist es noch schlimmer.

Auszug aus meinem .vimrc:

" WINDOW MANAGEMENT SETTINGS 

"moving from window to window 
nnoremap <C-h> <C-w>h 
nnoremap <C-j> <C-w>j 
nnoremap <C-k> <C-w>k 
nnoremap <C-l> <C-w>l 

"open new blank file 
nnoremap o<C-h> :lefta vsp new<cr> 
nnoremap o<C-j> :bel sp new<cr> 
nnoremap o<C-k> :abo sp new<cr> 
nnoremap o<C-l> :rightb vsp new<cr> 

"move window 
nnoremap <Leader><C-h> <C-W>H 
nnoremap <Leader><C-j> <C-W>J 
nnoremap <Leader><C-k> <C-W>K 
nnoremap <Leader><C-l> <C-W>L 

"maximise horizontally 
map <Leader>= <C-w><Bar> 

"maximise vertically 
map <Leader>- <C-w>_ 

"make all windows equally sized 
map <Leader><Leader> <C-w>= 

"change windowsizes in visual mode 
"horizontally - always three chars else it takes ages 
vnoremap - 3<C-w>< 
vnoremap = 3<C-w>> 

"vertically - always three chars else it takes ages 
vnoremap _ 3<C-w>- 
vnoremap + 3<C-w>+ 

"moving from window to window in visual mode 
"that way you can move from window to window and resize with -,=,_,+ directly as needed 
vnoremap <C-h> <ESC><C-w>hv 
vnoremap <C-j> <ESC><C-w>jv 
vnoremap <C-k> <ESC><C-w>kv 
vnoremap <C-l> <ESC><C-w>lv 

Für NERDtree zeige ich das Fenster und wieder schließen. Da etwas damit abgehört wird, öffne ich es und ändern Sie die Größe auf eine feste Breite automatisch:

nnoremap <Leader><CR> :NERDTreeFind<CR>999<C-w><40<C-w>>010l 
+0

Wie würde Splits in tmux mir helfen, Splits in Vim zu verwalten? Ich hoffe, der Vorschlag ist nicht viele vim-Instanzen in tmux Splits laufen zu lassen? – imslavko

+0

@imslavko Beitrag ist leicht aktualisiert. – sjas

+0

Sie haben eine Menge von Mappings zu ziemlich normalen Dingen gepostet, wie das Wechseln zwischen Fenstern oder das Öffnen eines neuen, es geht jedoch nicht auf das anfängliche wahrscheinliche Problem hinaus: Wenn Sie zu viele Splits unterschiedlicher Größe haben, wird es schwierig, sie zu verwalten. – imslavko

Verwandte Themen