2016-09-29 4 views
0

Ich arbeite an einem wachsenden Projekt mit vim. Ich möchte die meisten Projektdateien in derselben Sitzung geöffnet haben. Während das Projekt wächst, habe ich jedoch zu viele Dateien gleichzeitig geöffnet. [*] beginnt immer ein wenig unproduktiv bei 40+ Dateien zwischen Dateien Schalt, weil die Liste zu lang wird (für, sagen wir, 20 Dateien auf diese Weise der Arbeiten sehr gut für mich navigieren, jedoch).vim: mehrere "Sitzungen" in der gleichen Instanz?

Gibt es eine Möglichkeit, die Sitzung in mehreren "Untersitzungen" in derselben Instanz von vim aufzuteilen?

Wie stelle ich mir es ist, dass jede Sitzung enthalten würde, sagen wir, 20 Dateien und nur die Liste mit :ls, und dass ich zwischen ihnen in der gleichen vim Fenster (basicallly die gleiche wechseln könnte, als ob ich mehrere gerannt Instanzen von vim in der gleichen Shell und wechseln zwischen ihnen mit Ctrl-Z; fg %X, nur ohne vim verlassen).

[*] Ich mag zwischen Dateien mit :ls gefolgt von :bX (oder direkt :bX falls ich habe eine Puffernummer auswendig gelernt) navigieren, zusammen mit :bp/:bn, und ich habe immer mindestens zwei Split Offen, und dieser Workflow funktioniert ganz gut für mich, also suche ich keine effizienteren Alternativen zu :ls.

+0

Was ist das Problem, vor dem Sie stehen? In Ihrer Frage sprechen Sie davon, dass Ihr aktueller Arbeitsablauf "etwas unproduktiv" ist (ohne zu erklären, was das für Sie bedeutet), aber in Ihrem Kommentar zu Lucs Antwort sprechen Sie über die Dateigröße der Sitzung. – jpaugh

+0

Übrigens, wenn Sie immer noch das gleiche Problem haben, können Sie sehen, ob es eine Antwort auf die [Vim Beta] (https://vi.stackexchange.com/) gibt. – jpaugh

Antwort

2

Ich benutze :ls nie. Allerdings arbeite ich oft an großen Projekten, und ich öffne (viele) Dateien aus verschiedenen Projekten (und ich bin immer noch in der Lage zu kompilieren, was ich will in dem Modus, den ich will (debuggen, release, ...), generieren Tags unabhängig für jeden Projekt hat verschiedene Kodierungs Arten, usw.)

Ihre Frage scheint über „Wie gehe ich aus einer Datei in einer anderen“ zu sein. Ich habe gleichzeitig viele geteilte Fenster geöffnet und ich springe von einem zum anderen mit:

  • :sb, die auf Dateinamen Tabulatorvervollständigung unterstützt (bereits im Puffer geöffnet)
  • :sp **/filename*<tab> (wenn es nicht bereits geöffnet)
  • ein alter plugin of mine - andere in der Regel verwenden Unite, Befehl-T oder andere ähnliche Plugins - :sp und :sb in einem Befehl zu verschmelzen.
  • Tags. Die Standard-Integration von Tags (/ csope) ist schon nett. Dennoch habe ich lh-tags entwickelt, um die Tag-Navigation in einer Welt von überladenen und überschriebenen Funktionen zu vereinfachen, wie es in C++ der Fall ist.

EDIT: Ich habe gerade eine hoch experimentelle :Project <name> :ls Funktion in lh-vim-lib geschoben. Hinweis: Diese neue Projekt Funktion nicht gemeint war, zu tun, was Sie suchen, aber es ist einfach eine eingeschränkte :ls dank ihm zu haben.

, es zu benutzen, werden Sie zum ersten Registerpuffer zu einem Projekt oder ein anderes haben. Hier empfehle ich Plugins wie local_vimrc, wenn jedes Projekt als Dateien in einem bestimmten Verzeichnis unterschieden werden kann. Für jedes Stammverzeichnis eine Datei _vimrc_local.vim darin platzieren, dass enthalten werden:

:let s:k_version = 1 
" Global definitions executed everytime we enter a file belonging to the project 
" This is where we set g:lobal_variables and options for project-unaware plugins. 
.... 

" Then the anti-reinclusion guards for buffer definitions 
if &cp || (exists("b:loaded__my_foobar_project_settings") 
     \ && (b:loaded__my_foobar_project_settings > s:k_version) 
     \ && !exists('g:force_reload__my_foobar_project_settings')) 
    finish 
endif 
let b:loaded__my_foobar_project_settings = s:k_version 
let s:cpo_save=&cpo 
set cpo&vim 

" HERE, we say the current buffer belongs to a project 
" solution 1 when we need more control 
:call lh#project#define(s:, {'name': 'YouProjectName'}) 
" OR solution 2 which is easier to manipulate (tab completion, ...) 
:Project --define YourProjectName 

Sie können auch eine kleinere Körnung haben, wenn Sie möchten (dies ist etwas, was immer noch schlecht dokumentiert ist).

Dann können Sie die Liste der Projekte mit :Project --list konsultieren, oder die Puffer eines bestimmten Projekts mit :Project YouProjectName :ls konsultieren.

+0

Tanks für Ihre Vorschläge, ich war nicht bewusst von ': sb', die praktisch aussieht. Die Frage ist jedoch nicht so sehr, wie man von einer Datei zur anderen gelangt. ': ls' gefolgt von ': bX' (oder direkt 'bX' wenn ich die Nummer eines Puffers auswendig gelernt habe) neben': bn'/': bp' funktioniert gut genug für mich. Das Hauptproblem ist wirklich, dass die Sitzung ein bisschen groß wird, und ich möchte vermeiden, mehrere Instanzen von vim in verschiedenen tmux Fenstern zu verwenden (obwohl das wahrscheinlich der Weg sein würde, wenn etwas ähnlich dem, was ich in den Frage ist nicht möglich). – flotzilla

+1

Das ist die Sache: Sie müssen sich keine Puffernummer merken, um den Puffer im aktuellen Fenster zu öffnen. ': sb' und': b' unterstützen die Tabulatorvervollständigung auf dem Pufferdateinamen. Wir brauchen wirklich keine ': ls', um die Puffernummern zu kennen, um diese geöffneten Puffer im aktuellen Fenster zu laden. –

+0

Sonst gibt es bestenfalls Tabs, aber trotzdem wird alles von ': ls' angezeigt. –

Verwandte Themen