So arbeiten Sie effektiv mit mehreren Dateien in Vim

1099

Ich habe angefangen, Vim zu verwenden, um Perl-Skripte zu entwickeln, und finde es sehr leistungsfähig.

Eine Sache, die ich mag, ist es, mehrere Dateien gleichzeitig öffnen zu können mit:

vi main.pl maintenance.pl

und dann zwischen ihnen hüpfen mit:

:n
:prev

und sehen, welche Dateien geöffnet sind mit:

:args

Und um eine Datei hinzuzufügen, kann ich sagen:

:n test.pl

was ich dann erwarten würde, würde dann zu meiner Liste von Dateien hinzugefügt, aber stattdessen löscht es meine aktuelle Dateiliste und wenn ich tippe, habe :argsich nur test.plgeöffnet.

Wie kann ich Dateien in meiner Args-Liste hinzufügen und entfernen?

Edward Tanguay
quelle
5
tmux ... benutze vim in jedem Bereich
Tommy
4
@Tommy: Auf diese Weise können Sie keine zerrissenen / gelöschten Inhalte zwischen die Dateien einfügen (vims buffer). Wenn verfügbar, kann nur eine Zwischenablage helfen (siehe akzeptierte Antwort: stackoverflow.com/questions/5532878/… )
ChristophS
1
:Nscheint ein einfacher Weg zu sein, um zur vorherigen Datei zu gelangen ...
Gert van den Berg
vimcasts.org/categories/the-argument-list ? VimCasts werden beim Erlernen von Vim sehr empfohlen.
Mcepl

Antworten:

1171

Warum nicht Tabs verwenden (eingeführt in Vim 7)? Sie können zwischen Registerkarten mit :tabnund wechseln. :tabpMit :tabe <filepath>können Sie eine neue Registerkarte hinzufügen. und mit einem regulären :qoder :wqSie schließen einen Tab. Wenn Sie :tabnund / :tabpIhre Schlüssel zuordnen, können Sie einfach zwischen Dateien wechseln.F7F8

Wenn es nicht so viele Dateien gibt oder Sie nicht über Vim 7 verfügen, können Sie Ihren Bildschirm auch in mehrere Dateien aufteilen : :sp <filepath>. Dann können Sie mit Ctrl+ Wund einer Pfeiltaste zwischen den Teilbildschirmen in die Richtung wechseln, in die Sie sich bewegen möchten (oder anstelle der Pfeiltasten wfür den nächsten und Wfür den vorherigen Teilbildschirm).

fijter
quelle
72
Um einen Tab zu speichern und zu schließen, können Sie auch ZZanstelle von :wq(genau wie normalerweise speichern und schließen)
Andreas Grech
40
Ich verwende das vim-gnome-Paket in Ubuntu 10.10 und kann mit Strg + PageUp und Strg + PageDown zwischen Registerkarten wechseln. Ich musste nichts konfigurieren; es war Standard.
Joey Adams
268
Im Bearbeitungsmodus wird außerdem gtzur nächsten Registerkarte und gTzur vorherigen Registerkarte gewechselt.
Dean
40
Sie können mit ngt zu jeder Registerkarte springen, wobei n der Index der Registerkarte ist (beginnend mit eins). Ich denke, es gibt eine Option, die den Index jeder Registerkarte in der Nähe des Dateinamens anzeigt, aber ich weiß nicht, was es ist. Wenn jemand weiß, würde ich es gerne hören.
Leerzeiger
81
Beachten Sie auch, dass Sie das -pFlag verwenden können, um mehrere Dateien in Registerkarten über die Befehlszeile zu öffnen. Zum Beispiel gvim -p main.pl maintenance.plwerden diese beiden Dateien in Tabs öffnen.
Matthew Strawbridge
554

Auflistung

Um eine Liste der aktuellen Puffer anzuzeigen, verwende ich:

:ls

Öffnung

Um eine neue Datei zu öffnen, benutze ich

:e ../myFile.pl

mit erweiterter Tab-Vervollständigung ( set wildmenuin Ihre .vimrc).

Hinweis: Sie können auch verwenden :find, um eine Reihe von Pfaden für Sie zu durchsuchen. Sie müssen diese Pfade jedoch zuerst anpassen.


Schalten

Um zwischen allen geöffneten Dateien zu wechseln, verwende ich

:b myfile

mit erweiterter Tab-Vervollständigung (noch set wildmenu).

Hinweis: :b#Wählt die zuletzt besuchte Datei aus, damit Sie schnell zwischen zwei Dateien wechseln können.


Fenster verwenden

Ctrl-W sund Ctrl-W vum das aktuelle Fenster horizontal und vertikal zu teilen. Sie können auch :splitund :vertical split( :spund :vs) verwenden

Ctrl-W wum zwischen geöffneten Fenstern zu wechseln und Ctrl-W h(oder joder koder l) durch geöffnete Fenster zu navigieren.

Ctrl-W cum das aktuelle Fenster Ctrl-W ozu schließen und um alle Fenster außer dem aktuellen zu schließen.

Wenn Sie vim mit einem -ooder -OFlag starten, wird jede Datei in einer eigenen Aufteilung geöffnet.


Bei alledem brauche ich keine Tabs in Vim, und meine Finger finden meine Puffer, nicht meine Augen.

Hinweis: Wenn alle Dateien auf dieselbe Instanz von Vim verschoben werden sollen, starten Sie Vim mit der --remote-silentOption.

Sébastien RoccaSerra
quelle
4
Für den Fall, dass Sie mit mehreren Puffern spielen, würde ich LustyJuggler empfehlen .
Arun M
1
Vielen Dank, dass Sie eine sehr schöne Kurzreferenz für die vim-Befehle erstellt haben, die am häufigsten bei der Arbeit mit mehreren Dateien verwendet werden.
Quantikel
9
:bist ein sehr leistungsfähiger Befehl, da er sowohl Puffernummern als auch Puffernamen als Argumente akzeptieren kann. Was mehr? Es unterstützt auch die Tab-Vervollständigung für jeden Teil des Dateinamens. Sagen Sie , Sie haben foo.txt offen in Puffer 2, können Sie eingeben :b 2<Enter>oder :b foo.txtoder :b oo<Tab><Enter>zu bearbeiten , die Datei. Ja, der letzte würde 'oo' bis 'foo.txt' vervollständigen, wenn Sie <Tab> drücken.
Susam Pal
21
Ich habe diese Zeile in meiner .vimrc : nnoremap gb :ls<cr>:b<space>. Wenn ich gbim Befehlsmodus tippe, werden meine geöffneten Puffer und Typen aufgelistet :b , damit ich mit der Eingabe eines Puffernamens / einer Puffernummer beginnen kann.
Nkorth
5
Erwähnenswert ist auch, dass :beine Teilzeichenfolge akzeptiert wird, solange sie eindeutig ist. Wenn Sie also geöffnete Dateien foohaben bar, und baz, reicht dies gerade :b zaus, um Sie in den bazPuffer zu wechseln , und :b oooder :b obringt Sie in den fooPuffer.
Soren Björnstad
233
:ls

für die Liste der offenen Puffer

  • :bp vorheriger Puffer
  • :bn nächster Puffer
  • :bn( neine Zahl) zum n-ten Puffer bewegen
  • :b <filename-part> mit Tabulatortaste für automatische Vervollständigung (fantastisch !!)

In einigen Versionen von vim bnund bpsind tatsächlich bnextund bpreviousjeweils. Die automatische Vervollständigung der Registerkarte ist in diesem Fall hilfreich.

Oder ^wechseln Sie im normalen Modus zu der letzten Datei, an der Sie gearbeitet haben.

Außerdem können Sie vim-Sitzungen speichern

:mksession! ~/today.ses

Der obige Befehl speichert die aktuell geöffneten Dateipuffer und Einstellungen in ~/today.ses. Sie können diese Sitzung mithilfe von laden

vim -S ~/today.ses

Kein Problem, sich daran zu erinnern, wo Sie gestern aufgehört haben. ;)

Shyam
quelle
Gehe zu einem bestimmten Puffer: N CTRL- ^
Tom Yang
8
@ Shyam Ich glaube ich liebe dich! Irgendwie wusste ich nie genau über den Befehl mksession Bescheid, aber heute habe ich aus heiterem Himmel entschieden, dass es eine Möglichkeit geben muss, eine Liste von Dateien zu speichern, um sie einfach zu öffnen. Dies ist sogar noch besser, da es sogar den vollständigen Status der Dinge (Fensteraufteilungen, Pufferpositionen usw.) zu speichern scheint. So danke!
Kasapo
Verwenden Sie die "Markierung auch, um zu der Stelle zu springen, an der Sie sich das letzte Mal in der Datei befanden.
Chrom
113

So fügen Sie der argsListe hinzu:

:argadd

So löschen Sie aus der argsListe:

:argdelete

In Ihrem Beispiel können Sie :argedittest.pl verwenden, um test.pl zur argsListe hinzuzufügen und die Datei in einem Schritt zu bearbeiten.

:help args bietet viel mehr Details und erweiterte Verwendung

MarkB
quelle
4
Dies ist wirklich die Antwort auf die gestellte Frage, obwohl die anderen Antworten angesichts des Titels vollkommen fair sind.
Soren Bjornstad
48

Ich benutze Pufferbefehle - :bn(nächster Puffer), :bp(vorheriger Puffer) :buffers(Liste offener Puffer) :b<n>(offener Puffer n) :bd(Puffer löschen). :e <filename>wird nur in einen neuen Puffer geöffnet.

Andy Whitfield
quelle
18
: ls schneller als: Puffer
aehlke
42

Ich denke, Sie verwenden möglicherweise den falschen Befehl, um die Liste der geöffneten Dateien anzuzeigen.

Versuchen Sie, :lsdie Liste der geöffneten Dateien anzuzeigen, und Sie sehen:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

Sie können dann durch die Dateien springen, indem Sie auf sie mit den aufgeführten Nummern verweisen, z. B.: 3b

oder Sie können Ihren Bildschirm teilen, indem Sie die Nummer eingeben, aber jdn anstelle von nur b verwenden.

Nebenbei verweist% auf die aktuell sichtbare Datei und # auf die alternative Datei.

Sie können einfach zwischen diesen beiden Dateien wechseln, indem Sie auf drücken Ctrl Shift 6

Bearbeiten: So :lskönnen :regSie den aktuellen Inhalt Ihrer Register anzeigen, einschließlich der 0-9-Register, die das enthalten, was Sie gelöscht haben. Dies ist besonders nützlich, wenn Sie zuvor gelöschten Text wiederverwenden möchten.

Rob Wells
quelle
2
Schön zu sehen, dass neben verwandten Informationen wie% und #. +1
Ashish
35

Vim (aber nicht das ursprüngliche Vi!) Hat Registerkarten, die ich (in vielen Zusammenhängen) den Puffern überlegen finde. Sie können sagen :tabe [filename], dass Sie eine Datei in einem neuen Tab öffnen möchten. Das Wechseln zwischen Registerkarten erfolgt durch Klicken auf die Registerkarte oder durch Drücken der Tastenkombinationen [ n ] gtund gT. Graphical Vim verfügt sogar über grafische Registerkarten.

Konrad Rudolph
quelle
1
Danke, hört sich toll an, aber wir haben leider nur VIM 6.1 auf dem Server installiert.
Edward Tanguay
1
Tabs sind sehr praktisch mit Platzhaltern : vim -p dir/*. Die maximale Größe der Registerkarte beträgt 10, Sie können sie jedoch ändern, ~/.vimrcindem Sie tabpagemaxeinen anderen Wert festlegen.
Campa
27

Viele Antworten hier! Was ich benutze, ohne das Rad neu zu erfinden - die bekanntesten Plugins (die nicht so schnell sterben werden und von vielen Menschen verwendet werden) sind ultraschnell und geekig.

  • ctrlpvim / ctrlp.vim - um die Datei nach Namen zu finden. Fuzzy-Suche nach ihrem Speicherort oder nur nach ihrem Namen
  • jlanzarotta / bufexplorer - zum Durchsuchen geöffneter Puffer (wenn Sie sich nicht erinnern, wie viele Dateien Sie kürzlich geöffnet und geändert haben und Sie sich nicht erinnern, wo sie sich befinden, wahrscheinlich weil Sie mit Ag nach ihnen gesucht haben)
  • rking / ag.vim , um die Dateien in Bezug auf gitignore zu durchsuchen
  • scrooloose / nerdtree , um die Verzeichnisstruktur anzuzeigen, nachzuschauen, Dateien hinzuzufügen / zu löschen / zu ändern

BEARBEITEN: Vor kurzem habe ich dyng / ctrlsf.vim verwendet , um mit der Kontextansicht zu suchen (wie die Sublime-Suche), und ich habe die Engine von ag auf ripgrep umgestellt . Die Leistung ist hervorragend.

EDIT2: Zusammen mit CtrlSF können Sie mg979 / vim-visual-multi verwenden , Änderungen an mehreren Dateien gleichzeitig vornehmen und diese am Ende auf einmal speichern.

Petur Subev
quelle
2
ctrlp ist umgezogen und befindet sich jetzt unter ctrlpvim / ctrlp.vim
Dave
1
DAS ist die richtige Antwort! Warum hat es nicht mehr positive Stimmen?
Thomas Möbius
2
Es gibt keine weiteren Upvotes, da die Frage 2008 gestellt wurde. :)
Burnettk
genau. Ich kann mir vim in einer Entwicklungsumgebung ohne diese Plugins nicht vorstellen.
Edgar Alloro
25

Dinge wie :eund :baddwerden nur EIN Argument akzeptieren, daher wird das Folgende fehlschlagen

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

Wenn Sie mehrere Dateien aus vim hinzufügen möchten, verwenden Sie arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*
puk
quelle
21

Einige Antworten in diesem Thread schlagen die Verwendung von Registerkarten vor, andere die Verwendung von Puffer, um dasselbe zu erreichen. Tabs und Puffer sind unterschiedlich. Ich empfehle Ihnen dringend, diesen Artikel " Vim Tab Wahnsinn - Puffer gegen Tabs " zu lesen .

Hier ist eine schöne Zusammenfassung, die ich aus dem Artikel gezogen habe:

Zusammenfassung:

  • Ein Puffer ist der speicherinterne Text einer Datei.
  • Ein Fenster ist ein Ansichtsfenster in einem Puffer.
  • Eine Registerkarte ist eine Sammlung von Fenstern.
Andrew
quelle
2
Sie erhalten diese Zusammenfassung, indem Sie :help windowVim
icc97
19

Wenn ich mehrere Dateien in vim verwende, verwende ich meistens diese Befehle (mit ~ 350 geöffneten Dateien):

  • :b <partial filename><tab> (zu einem Puffer springen)
  • :bw (Puffer löschen, Puffer entfernen)
  • :e <file path> (bearbeiten, neuen Puffer öffnen>
  • pltags - Aktivieren Sie das Springen zu Unterprogramm- / Methodendefinitionen
Zickdon
quelle
2
350 Dateien !!! Das ist beeindruckend. Wie finden Sie den richtigen Puffer zum Springen? Machst du jemals Splits?
Brian O'Dell
3
@ BrianO'Dell das :b <partial filename><tab>Plus set wildmenuin deinen .vimrcArbeiten gut, wenn du Tonnen von Puffern offen hast. Dann stimmen Sie nur teilweise überein und scrollen durch die gefundenen. In anderen anständigen Editoren haben Sie Fuzzy-Suche, aber normalerweise können Sie diese Fuzzy-Suche nicht nur auf die Dateien beschränken, die Sie geöffnet haben.
icc97
17

Hinzufügen einer weiteren Antwort, da diese von keiner der Antworten abgedeckt wird

So ändern Sie alle tabanzuzeigenden Puffer .

 :tab sball

öffnet alle Puffer für die Registerkartenansicht. Dann können wir beliebige tabulatorbezogene Befehle verwenden

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

Details unter :help tab-page-commands.

Wir können vim anweisen, als Registerkartenansicht mehrere Dateien von zu öffnen vim -p file1 file2. alias vim='vim -p'wird nützlich sein.
Das Gleiche kann auch erreicht werden, indem der folgende automatische Befehl eingegeben wird~/.vimrc

 au VimEnter * if !&diff | tab all | tabfirst | endif

Wie dem auch sei , die Frage zu beantworten: zu arg Liste hinzuzufügen: arga file,

So löschen Sie aus der Arg-Liste: argd pattern

Mehr bei :help arglist

dlmeetei
quelle
16

Möglicherweise möchten Sie globale Vim-Marken verwenden .

Auf diese Weise können Sie schnell zwischen Dateien und sogar zum markierten Speicherort in der Datei springen. Außerdem sind die Tastenbefehle kurz: 'C Bringt mich zu dem Code, mit dem ich arbeite, und 'T zu dem Komponententest, mit dem ich arbeite.

Wenn Sie die Position wechseln, können Sie die Markierungen auch schnell zurücksetzen: mC Markiert den neuen Code-Spot und mT den neuen Test-Spot.

user2179522
quelle
12

Ich verwende dieselbe .vimrc-Datei für gVim und die Befehlszeile Vim. Ich verwende normalerweise Registerkarten in gVim und Puffer in der Befehlszeile Vim, daher habe ich meine .vimrc-Datei so eingerichtet, dass die Arbeit mit beiden einfacher ist:

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

Dies blockiert die vorhandenen Zuordnungen für Hund L, macht jedoch das Wechseln zwischen Dateien extrem schnell und einfach. Einfach Hfür das nächste und Lfür das vorherige drücken; Unabhängig davon, ob Sie Registerkarten oder Puffer verwenden, erhalten Sie die beabsichtigten Ergebnisse.

Max Cantor
quelle
1
Ich mag diese Zuordnungen. Versuchen Sie auch Strg-H, Strg-L. Ich habe Firefox und das Gnome-Terminal mit denselben Zuordnungen eingerichtet. Sehr schön, konsistente Tastenkombinationen zu haben.
cmcginty
4
Verwenden Sie Ihren Leader-Schlüssel anstelle von Strg, um zu vermeiden, dass vorhandene Zuordnungen
überlastet werden
10

Wenn Sie mehrere Puffer verwenden, ist es meiner Meinung nach am wichtigsten, die Puffer so auszublenden, dass Sie die Puffer wechseln können, auch wenn Sie nicht gespeicherte Änderungen an dem Puffer vorgenommen haben, den Sie verlassen.

Vertiefung
quelle
9

Wenn Sie nur die in vim integrierten Befehle verwenden , ist der beste, den ich je gesehen habe, um zwischen mehreren Puffern zu wechseln, folgender:

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Es kombiniert sowohl Befehle :lsals auch :bBefehle perfekt - listet alle geöffneten Puffer auf und wartet darauf, dass Sie den Befehl zum Umschalten des Puffers eingeben.

Wenn Sie die obige Zuordnung in vimrc angegeben haben <Leader>f,

  • Alle geöffneten Puffer werden angezeigt
  • Du kannst:
    • Geben Sie ein 23, um zu Puffer 23 zu gelangen.
    • Geben Sie ein #, um zum alternativen / MRU-Puffer zu gelangen.
    • Geben Sie den Teilnamen der Datei ein und geben Sie dann <Tab>oder <C-i>zur automatischen Vervollständigung ein.
    • Oder einfach <CR>oder <Esc>um auf dem aktuellen Puffer zu bleiben

Eine Momentaufnahme der Ausgabe für die obige Schlüsselzuordnung lautet:

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

Im obigen Schnappschuss:

  • Zweite Spalte: %afür aktuell, hfür versteckt, #für vorher, leer für wurde nicht umgeschaltet.
  • Dritte Spalte: +für modifiziert.

Auch empfehle ich stark set hidden. Siehe :help 'hidden'.

qeatzy
quelle
Das ist eine großartige Idee! Ich habe mit :bund :lsviel , aber unabhängig. Ich denke, dies wird weniger nützlich, wenn Sie mehr als eine Seite Puffer haben, aber dann können Sie immer noch einfach auf:b
icc97
Schön zu sehen, dass es hilft. Prost! :)
qeatzy
In diesem Vim-Wikia können Sie es ein wenig verkürzen nnoremap <leader>f :ls<cr>:b<space>, was jedoch zu Problemen mit dem Befehl 'more' führen kann
icc97
Ja, dies funktioniert einwandfrei, wenn weniger Dateien geöffnet sind (der übliche Anwendungsfall). set moreSachen machen nur dann einen Unterschied, wenn viele Dateien geöffnet sind (mehr als eine Seite), z. B. vim /usr/include/*obwohl sie dann weniger nützlich sind.
Qeatzy
8

Ich verwende Folgendes: Dies bietet Ihnen viele Funktionen, die Sie in anderen Editoren wie Sublime Text / Textmate erwarten würden

  1. Verwenden Sie Puffer, keine Registerkarten. Puffer sind das gleiche Konzept wie Registerkarten in fast allen anderen Editoren.
  2. Wenn Sie das gleiche Erscheinungsbild von Registerkarten wünschen, können Sie das vim-airline- Plugin mit der folgenden Einstellung in Ihrem verwenden .vimrc: let g:airline#extensions#tabline#enabled = 1. Dadurch werden automatisch alle Puffer als Registerkartenüberschriften angezeigt, wenn keine Registerkarten geöffnet sind
  3. Verwenden Sie Tim Popes Vim-unbeeinträchtigt, der gibt [bund ]bzum Verschieben zu vorherigen / nächsten Puffern (plus einer ganzen Reihe anderer Extras)
  4. Haben Sie set wildmenuin Ihrem .vimrcdann bei der Eingabe :b <file part>+ Tabfür einen Puffer erhalten Sie eine Liste der möglichen Puffer erhalten , dass Sie mit der rechten Pfeile links / verwenden können , um zu blättern
  5. Verwenden Sie das Vim-Obsession- Plugin von Tim Pope , um Sitzungen zu speichern, die gut mit der Fluggesellschaft funktionieren (ich hatte große Probleme mit Sitzungen und Plugins ).
  6. Verwenden Sie das Vim-Essig- Plugin von Tim Pope . Dies funktioniert mit dem Muttersprachler :Explore, erleichtert jedoch die Arbeit. Geben Sie einfach ein -, um den Explorer zu öffnen. Dies ist der gleiche Schlüssel wie das Aufrufen eines Verzeichnisses im Explorer. Beschleunigt die Navigation (mit fzf verwende ich dies jedoch selten)
  7. fzf (das als vim-Plugin installiert werden kann) ist auch ein sehr leistungsfähiger Fuzzy-Finder, mit dem Sie nach Dateien suchen können (und auch nach Puffern). fzf spielt auch sehr gut mit fd (eine schnellere Version von find)
  8. Verwenden Sie Ripgrep mit vim-ripgrep , um Ihre Codebasis zu durchsuchen, und verwenden Sie dann :cdodie Ergebnisse, um zu suchen und zu ersetzen
icc97
quelle
fzf und fzf-vim haben mein Leben verändert, können es nicht genug empfehlen. Es funktioniert auch sehr gut unter Windows, auch in der Konsole, um unscharf nach Dateien zu suchen. Verwenden Sie unter Windows das Ripgrep (rg) -Backend, das meiner Erfahrung nach jedes andere Find / Grep-Tool übertrifft (wie Silversearcher oder Standard-Windows-Find, dass fzf iirc verwendet). Sie können damit eine beliebige Liste von Elementen durchsuchen: zuletzt verwendete Dateien, aktuell geöffnete Puffer, Zeilen im aktuellen Puffer, Zeilen in der Codebasis (cwd), Tags usw. Sie können ganz einfach Ihre eigene Listen-Fuzzy-Suche programmieren. So gut! (Ich kam von Strg-P ​​und schaute nie zurück)
Emile Vrijdags
7

Meine Art, effektiv mit mehreren Dateien zu arbeiten, ist die Verwendung von tmux.

Sie können Fenster vertikal und horizontal teilen, wie in:

Geben Sie hier die Bildbeschreibung ein

Ich habe es sowohl auf meinem Mac als auch auf meinem Linux-Computer so und finde es besser als den nativen Mechanismus zum Umschalten des Fensterbereichs, der bereitgestellt wird (auf Macs). Ich finde das Umschalten einfacher und nur mit tmux konnte ich die "neue Seite im selben aktuellen Verzeichnis" auf meinem Mac zum Laufen bringen (trotz der Tatsache, dass es Optionen zu geben scheint, neue Fenster im selben Verzeichnis zu öffnen) ein überraschend kritisches Stück. Ein sofortiger neuer Bereich am aktuellen Standort ist erstaunlich nützlich. Eine Methode, die neue Fenster mit denselben Tastenkombinationen für beide Betriebssysteme erstellt, ist für mich von entscheidender Bedeutung und ein Bonus für alle für die zukünftige persönliche Kompatibilität. Abgesehen von mehreren tmux-Fenstern habe ich auch versucht, mehrere Registerkarten zu verwenden, z. B. Geben Sie hier die Bildbeschreibung einund mehrere neue Fenster, zGeben Sie hier die Bildbeschreibung einund letztendlich habe ich festgestellt, dass mehrere tmux-Fenster für mich am nützlichsten sind. Ich bin sehr "visuell" und mag es, meine verschiedenen Kontexte direkt vor mir zu halten, verbunden als Scheiben.

tmux unterstützt auch horizontale und vertikale Bereiche, die der ältere screennicht unterstützt hat (obwohl iterm2 von mac dies zu unterstützen scheint, aber auch hier hat die aktuelle Verzeichniseinstellung bei mir nicht funktioniert). tmux 1.8

Michael Durrant
quelle
1
Ich musste lol, als ich Ihr künstliches Beispiel für "mehrere Fenster" sah. Ich hoffe, niemand arbeitet so :-) Wie auch immer, ich benutze Kacheln wm, was noch besser ist (ich habe von tmux auf i3wm gewechselt). Nur um Ihre Antwort zu vervollständigen.
lzap
1
Tmux ist fantastisch und ich habe diesen Ansatz lange Zeit verwendet, aber es erschwert das Navigieren und Kopieren und Einfügen zwischen zwei Dateien.
Neallred
1
Früher habe ich das gemacht, aber mehrere Vim-Puffer sind überlegen, wenn Sie ziehen / einfügen müssen
Titou
3

Ich benutze die Kommandozeile und git viel, also habe ich diesen Alias ​​in meinem bashrc:

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

Dadurch wird jede neue Datei in einer neuen Registerkarte in einem vorhandenen Fenster geöffnet und ein Fenster für jedes Git-Repository erstellt. Wenn Sie also zwei Dateien aus Repo A und drei Dateien aus Repo B öffnen, erhalten Sie zwei Fenster, eines für Repo A mit zwei Registerkarten und eines für Repo B mit drei Registerkarten.

Wenn die Datei, die Sie öffnen, nicht in einem Git-Repo enthalten ist, wird ein Standardfenster angezeigt.

Um zwischen Registerkarten zu springen, verwende ich diese Zuordnungen:

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

Um mehrere Dateien gleichzeitig zu öffnen, sollten Sie dies mit einer der anderen Lösungen kombinieren.

Jens
quelle
3

Ich verwende mehrere Puffer, die in meiner ~/.vimrcDatei versteckt sind .

Das Mini-Buffer-Explorer-Skript ist auch gut, um eine schöne kompakte Liste Ihrer Puffer zu erhalten. Dann :b1oder :b2..., um zum entsprechenden Puffer zu gelangen, oder verwenden Sie den Minipuffer-Explorer und blättern Sie durch die Puffer.

projecktzero
quelle
2

Versuchen Sie, den folgenden Karten zu folgen, um mehrere Dateien bequem bearbeiten zu können

"geteilte Fenster

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

"sich bewegen

nmap <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h

user2663398
quelle
2

Ich habe ein sehr einfaches Video gemacht, das den von mir verwendeten Workflow zeigt. Grundsätzlich verwende ich das Ctrl-P Vim-Plugin und habe die Puffernavigation der Eingabetaste zugeordnet.

Auf diese Weise kann ich im normalen Modus die Eingabetaste drücken, die Liste der geöffneten Dateien anzeigen (die in einem kleinen neuen Fenster am unteren Bildschirmrand angezeigt wird), die Datei auswählen, die ich bearbeiten möchte, und erneut die Eingabetaste drücken. Um schnell mehrere geöffnete Dateien zu durchsuchen, geben Sie einfach einen Teil des Dateinamens ein, wählen Sie die Datei aus und drücken Sie die Eingabetaste.

Ich habe nicht viele Dateien im Video geöffnet, aber es wird unglaublich hilfreich, wenn Sie anfangen, viele davon zu haben.

Da das Plugin die Puffer mithilfe einer MRU-Reihenfolge sortiert, können Sie einfach zweimal die Eingabetaste drücken und zur zuletzt bearbeiteten Datei springen.

Nach der Installation des Plugins benötigen Sie lediglich folgende Konfiguration:

nmap <CR> :CtrlPBuffer<CR>

Natürlich können Sie es einem anderen Schlüssel zuordnen, aber ich finde die Zuordnung sehr praktisch.

fede1024
quelle
2

Ich würde vorschlagen, das Plugin zu verwenden

NERDtree

Hier ist der Github-Link mit Anweisungen.

Nerdtree

Ich benutze vim-plug als Plugin-Manager, aber Sie können auch Vundle verwenden.

vim-plug

Vundle

thenakulchawla
quelle
2

Bei meinen und vielen anderen vim-Benutzern ist die beste Option:

  • Öffnen Sie die Datei mit,

: e Dateiname.Erweiterung

Und dann nur noch Strg + 6, um zum letzten Puffer zu wechseln. Oder Sie können jederzeit drücken

: ls, um den Puffer aufzulisten und dann den Puffer mit b gefolgt von der Puffernummer zu ändern.

  • Wir machen eine vertikale oder horizontale Aufteilung mit

: vsp für vertikale Aufteilung

: sp für horizontale Aufteilung

Und dann <C-W><C-H/K/L/j>die Arbeitsaufteilung zu ändern.

Sie können natürlich jede Datei in beliebig vielen Teilungen bearbeiten.

Löwe
quelle
Bitte bearbeiten Sie Ihre Antwort, um sicherzustellen, dass sie andere Antworten verbessert, die bereits in dieser Frage enthalten sind.
Hongsy
1

Als ich anfing, VIM zu verwenden, war mir nicht klar, dass Registerkarten als unterschiedliche Fensterlayouts verwendet werden sollten, und der Puffer dient als Rolle für das Bearbeiten / Wechseln mehrerer Dateien untereinander. Eigentlich sind Tabs am Anfang noch nicht einmal vor Version 7.0 vorhanden, und ich habe gerade ein VIM in einem Terminal-Tab geöffnet (ich habe im Moment Gnome-Terminal verwendet) und zwischen Tabs mit Alt + -Nummern gewechselt, da ich dachte, Befehle wie : Puffer ,: bn und: bp waren zu viel für mich. Als VIM 7.0 veröffentlicht wurde, ist es für mich einfacher, viele Dateien zu verwalten und darauf umzuschalten. Vor kurzem wurde mir jedoch klar, dass Puffer immer der richtige Weg sein sollten, es sei denn, eines muss konfiguriert werden, damit es richtig funktioniert.

Also habe ich vim-airline ausprobiert und die visuelle, tab-artige Pufferleiste oben aktiviert, aber die Grafik hatte Probleme mit meinem iTerm2, also habe ich ein paar andere ausprobiert und es scheint, dass MBE für mich am besten funktioniert. Ich habe auch Shift + h / l als Verknüpfungen festgelegt, da die ursprünglichen (Verschieben zum Kopf / Ende der aktuellen Seite) für mich nicht sehr nützlich sind.

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

Es scheint noch einfacher zu sein als gt und gT, und: e ist auch einfacher als: tabnew. Ich finde: bd ist zwar nicht so praktisch wie: q (MBE hat ein Problem damit), aber ich kann mit allen Dateien im Puffer leben, denke ich.

superarts.org
quelle
0

Wenn Sie auf osx sind und auf Ihre Registerkarten klicken möchten, verwenden Sie MouseTerm und SIMBL (von hier aus ). Schauen Sie sich auch diese verwandte Diskussion an .

Cpt. Senkfuss
quelle
0

Die meisten Antworten in diesem Thread verwenden einfache vim-Befehle, was natürlich in Ordnung ist, aber ich dachte, ich würde eine ausführliche Antwort mit einer Kombination von Plugins und Funktionen geben, die ich besonders nützlich finde (zumindest einige dieser Tipps stammen aus Gary Bernhardts Datei Navigationstipps ):

  1. Um zwischen den letzten beiden Dateien umzuschalten, drücken Sie einfach <leader>zweimal. Ich empfehle, <leader>der Leertaste Folgendes zuzuweisen:

    nnoremap <leader><leader> <c-^>
    
  2. Um sich schnell in einem Projekt zu bewegen, ist die Antwort eine Fuzzy-Matching-Lösung wie CtrlP . Ich binde es <leader>afür einen schnellen Zugriff an.

  3. Für den Fall, dass ich eine visuelle Darstellung der aktuell geöffneten Puffer sehen möchte, verwende ich das BufExplorer-Plugin . Einfach aber effektiv.

  4. Wenn ich mich im Dateisystem umsehen möchte, würde ich die Befehlszeile oder ein externes Dienstprogramm (Quicklsilver, Afred usw.) verwenden, aber um die aktuelle Projektstruktur zu betrachten, ist NERD Tree ein Klassiker. Verwenden Sie dies jedoch nicht anstelle 2Ihrer Hauptmethode zum Auffinden von Dateien. Es wird dich wirklich verlangsamen. Ich benutze die Bindung <leader>ff.

Diese sollten ausreichen, um Dateien zu finden und zu öffnen. Verwenden Sie von dort natürlich horizontale und vertikale Teilungen. In Bezug auf Splits finde ich diese Funktionen besonders nützlich:

  1. Öffnen Sie neue Teilungen in kleineren Bereichen, wenn nicht genügend Platz vorhanden ist, und erweitern Sie sie in der Navigation. Siehe hier für Kommentare zu was diese tun genau:

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  2. Wechseln Sie einfach von Split zu Split:

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    
Dionyse
quelle
0

Sie können ein absoluter Verrückter und Alias ​​sein vim, vim -pindem Sie Folgendes hinzufügen .bashrc:

alias vim="vim -p"

Dies führt dazu, dass mehrere Dateien aus der Shell in Registerkarten geöffnet werden, ohne dass Sie anschließend :tab ballvon vim aus aufrufen müssen .

npit
quelle