Jak efektywnie pracować z wieloma plikami w Vimie

1098

Zacząłem używać Vima do tworzenia skryptów Perla i zaczynam uważać go za bardzo wydajny.

Jedną z rzeczy, które lubię, jest możliwość otwierania wielu plików jednocześnie:

vi main.pl maintenance.pl

a następnie przeskakuj między nimi za pomocą:

:n
:prev

i zobacz, który plik jest otwarty za pomocą:

:args

Aby dodać plik, mogę powiedzieć:

:n test.pl

który, jak się spodziewam, zostałby następnie dodany do mojej listy plików, ale zamiast tego wymazuje moją aktualną listę plików i kiedy piszę, :argsmam tylko test.plotwarte.

Jak mogę dodawać i usuwać pliki z mojej listy argumentów?

Edward Tanguay
źródło
5
tmux ... użyj vima w każdym okienku
Tommy
4
@ Tommy: w ten sposób nie można wklejać wyszarpniętych / usuniętych treści między plikami (bufor vims). Jeśli jest dostępny, tylko schowek może pomóc (patrz zaakceptowana odpowiedź: stackoverflow.com/questions/5532878/... )
ChristophS
1
:Nwydaje się łatwiejszym sposobem na przejście do poprzedniego pliku ...
Gert van den Berg
vimcasts.org/categories/the-argument-list ? VimCasty są naprawdę wysoce zalecane podczas nauki vim.
mcepl

Odpowiedzi:

1171

Dlaczego nie skorzystać z zakładek (wprowadzonych w Vimie 7)? Możesz przełączać się między kartami za pomocą :tabni :tabp, Za pomocą :tabe <filepath>możesz dodać nową kartę; i zwykłym :qlub :wqzamkniesz kartę. Jeśli mapujesz :tabni :tabpdo F7/ F8kluczy, możesz łatwo przełączać się między plikami.

Gdyby nie to, że wiele plików lub nie masz Vim 7 można również podzielić ekran na wielu plikach: :sp <filepath>. Następnie możesz przełączać się między ekranami podziału za pomocą Ctrl+, Wa następnie klawisza strzałki w kierunku, w którym chcesz się poruszać (lub zamiast klawiszy strzałek, wdla następnego i Wpoprzedniego ekranu podzielonego)

fijter
źródło
72
Aby zapisać i zamknąć kartę, możesz także użyć ZZzamiast :wq(tak jak normalnie zapisuje i zamyka)
Andreas Grech
40
Korzystam z pakietu vim-gnome w Ubuntu 10.10 i mogę przełączać się między kartami za pomocą Ctrl + PageUp i Ctrl + PageDown. Nie musiałem niczego konfigurować; to było domyślne.
Joey Adams
268
Również w trybie edycji gtprzechodzi do następnej karty i gTprzechodzi do poprzedniej karty.
Dziekan
40
Możesz przejść do dowolnej karty, używając ngt, gdzie n jest indeksem karty (zaczynając od jednej). Myślę, że istnieje opcja wyświetlająca indeks każdej zakładki w pobliżu nazwy pliku, ale nie wiem, co to jest. Jeśli ktoś wie, chciałbym to usłyszeć.
void-pointer
81
Zauważ też, że możesz użyć -pflagi, aby otworzyć wiele plików na kartach z wiersza poleceń. Na przykład gvim -p main.pl maintenance.plte dwa pliki zostaną otwarte na kartach.
Matthew Strawbridge
554

Wymienianie kolejno

Aby zobaczyć listę bieżących buforów, używam:

:ls

Otwarcie

Aby otworzyć nowy plik, używam

:e ../myFile.pl

z ulepszonym uzupełnianiem kart (wstaw set wildmenuw swoim .vimrc).

Uwaga: możesz również użyć, :findktóry przeszuka dla ciebie zestaw ścieżek, ale najpierw musisz je dostosować.


Przełączanie

Używam do przełączania między wszystkimi otwartymi plikami

:b myfile

z ulepszonym uzupełnianiem tabulatorów (wciąż set wildmenu).

Uwaga: :b#wybiera ostatnio odwiedzany plik, dzięki czemu można go szybko przełączać między dwoma plikami.


Korzystanie z systemu Windows

Ctrl-W si Ctrl-W vpodzielić bieżące okno poziomo i pionowo. Możesz także użyć :spliti :vertical split( :spi :vs)

Ctrl-W wdo przełączania między otwartymi oknami i Ctrl-W h(lub jlub klub l) do poruszania się po otwartych oknach.

Ctrl-W caby zamknąć bieżące okno i Ctrl-W ozamknąć wszystkie okna oprócz bieżącego.

Rozpoczęcie vima od flagi -olub -Ootwiera każdy plik w osobnym podziale.


Z tymi wszystkimi nie potrzebuję zakładek w Vimie, a moje palce znajdują moje bufory, a nie oczy.

Uwaga: jeśli chcesz, aby wszystkie pliki trafiły do ​​tej samej instancji Vima, uruchom Vima z --remote-silentopcją.

Sébastien RoccaSerra
źródło
4
Jeśli grasz z wieloma buforami, polecam LustyJuggler .
Arun M
1
Dziękujemy za zrobienie bardzo miłego szybkiego odwołania do poleceń vim najczęściej używanych podczas pracy z wieloma plikami.
kwantowe
9
:bjest bardzo potężnym poleceniem, ponieważ może przyjmować zarówno numery buforów, jak i nazwy buforów jako argumenty. Co wiecej? Obsługuje także uzupełnianie tabulatorami w dowolnej części nazwy pliku. Powiedzmy, masz foo.txt otwarty w buforze 2, można wpisać :b 2<Enter>lub :b foo.txtlub :b oo<Tab><Enter>do edycji tego pliku. Tak, ostatni dopełniłby „oo” do „foo.txt” po naciśnięciu <Tab>.
Susam Pal
21
Mam ten wiersz w moim .vimrc: nnoremap gb :ls<cr>:b<space>. Kiedy piszę gbw trybie poleceń, wyświetla listę moich otwartych buforów i typów :b , gotowych, żebym mógł zacząć pisać nazwę / numer bufora.
nkorth
5
Warto również wspomnieć, że :bzaakceptuje dopasowanie podłańcuchowe, o ile jest to jednoznaczne. Więc jeśli masz otwarte pliki foo, bari baz, po prostu :b zwystarczy przejdziesz do bazbufora, i :b ooczy :b obędzie można dostać się do foobufora.
Soren Bjornstad,
233
:ls

dla listy otwartych buforów

  • :bp poprzedni bufor
  • :bn następny bufor
  • :bn( nliczba) przejdź do n-tego bufora
  • :b <filename-part> z klawiszem tab zapewniającym automatyczne uzupełnianie (super !!)

W niektórych wersjach vim, bni bpsą w rzeczywistości bnexti bpreviousodpowiednio. W tym przypadku pomocne jest automatyczne uzupełnianie kart.

Lub gdy jesteś w trybie normalnym, użyj, ^aby przejść do ostatniego pliku, nad którym pracujesz.

Dodatkowo możesz zapisać sesje vima

:mksession! ~/today.ses

Powyższe polecenie zapisuje bieżące otwarte bufory plików i ustawienia w ~/today.ses. Możesz załadować tę sesję za pomocą

vim -S ~/today.ses

Bezproblemowe zapamiętywanie miejsca, w którym wczoraj przerwałeś. ;)

shyam
źródło
przejdź do konkretnego bufora: N CTRL- ^
Tom Yang
8
@shyam Myślę, że cię kocham! Jakoś nigdy nie wiedziałem na pewno o komendzie mksession, ale dzisiaj niespodziewanie zdecydowałem, że MUSI być jakiś sposób na zapisanie listy plików, aby łatwo je otworzyć. Jest to nawet lepsze, ponieważ wydaje się nawet przechowywać pełny stan rzeczy (podziały okien, lokalizacje buforów itp.). Więc dziękuję!
Kasapo,
Użyj również "znaku, aby przejść do miejsca, w którym ostatnio byłeś w pliku.
Chromium,
113

Aby dodać do argslisty:

:argadd

Aby usunąć z argslisty:

:argdelete

W twoim przykładzie możesz użyć :argedittest.pl, aby dodać test.pl do argslisty i edytować plik w jednym kroku.

:help args daje znacznie więcej szczegółów i zaawansowane wykorzystanie

MarkB
źródło
4
To jest naprawdę odpowiedź na zadane pytanie, choć biorąc pod uwagę tytuł, pozostałe odpowiedzi są całkowicie uczciwe.
Soren Bjornstad 24.04.16
48

Używam poleceń bufora - :bn(następny bufor), :bp(poprzedni bufor) :buffers(lista otwartych buforów) :b<n>(otwarty bufor n) :bd(usuń bufor). :e <filename>otworzy się po prostu w nowym buforze.

Andy Whitfield
źródło
18
: ls szybszy niż: bufory
aehlke,
42

Myślę, że możesz użyć niewłaściwego polecenia do przeglądania listy plików, które otworzyłeś.

Spróbuj zrobić, :lsaby zobaczyć listę otwartych plików, a zobaczysz:

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

Następnie możesz przeglądać pliki, odwołując się do nich za pomocą wymienionych liczb, np .: 3b

lub możesz podzielić ekran, wprowadzając numer, ale używając sb zamiast tylko b.

Na bok% oznacza plik obecnie widoczny, a # oznacza plik alternatywny.

Możesz łatwo przełączać się między tymi dwoma plikami, naciskając Ctrl Shift 6

Edycja: tak :ls, jak możesz użyć, :regaby zobaczyć bieżącą zawartość swoich rejestrów, w tym rejestry 0-9, które zawierają to, co usunąłeś. Jest to szczególnie przydatne, jeśli chcesz ponownie użyć częściowo usuniętego tekstu.

Rob Wells
źródło
2
Miło widzieć na boku pokrewne informacje, takie jak% i #. +1
Ashish
35

Vim (ale nie oryginalny Vi!) Ma zakładki, które uważam (w wielu kontekstach) za lepsze od buforów. Możesz powiedzieć, :tabe [filename]aby otworzyć plik w nowej karcie. Przełączanie między kartami odbywa się poprzez kliknięcie karty lub kombinacji klawiszy [ n ] gti gT. Graficzny Vim ma nawet karty graficzne.

Konrad Rudolph
źródło
1
Dzięki, brzmi świetnie, ale niestety mamy tylko VIM 6.1 zainstalowany na serwerze.
Edward Tanguay,
1
Klapki są bardzo wygodne z symboli wieloznacznych: vim -p dir/*. Maksymalny rozmiar tabulatora to 10, ale można go zmienić w ~/.vimrcustawieniu tabpagemaxna inną wartość.
Campa
27

Wiele odpowiedzi tutaj! To, czego używam bez wymyślania na nowo koła - najsłynniejsze wtyczki (które wkrótce nie umrą i są używane przez wiele osób), aby być ultraszybkim i naukowym.

  • ctrlpvim / ctrlp.vim - aby znaleźć plik według nazwy rozmyte wyszukiwanie według jego lokalizacji lub po prostu jego nazwy
  • jlanzarotta / bufexplorer - do przeglądania otwartych buforów (gdy nie pamiętasz, ile plików ostatnio otworzyłeś i zmodyfikowałeś i nie pamiętasz, gdzie się znajdują, prawdopodobnie dlatego, że szukałeś ich za pomocą Ag)
  • rking / ag.vim do przeszukiwania plików w odniesieniu do gitignore
  • scrooloose / nerdtree, aby zobaczyć strukturę katalogów, przeglądanie, dodawanie / usuwanie / modyfikowanie plików

EDYCJA: Ostatnio używam dyng / ctrlsf.vim do wyszukiwania w widoku kontekstowym (jak wyszukiwanie Sublime) i zmieniłem silnik z ag na ripgrep . Wydajność jest znakomita.

EDYCJA 2: Wraz z CtrlSF możesz używać mg979 / vim-visual-multi , wprowadzać zmiany do wielu plików jednocześnie, a następnie zapisywać je za jednym razem.

Petur Subev
źródło
2
ctrlp został przeniesiony i znajduje się teraz w ctrlpvim / ctrlp.vim
Dave
1
To jest właściwa odpowiedź! Dlaczego nie ma więcej głosów pozytywnych?
Thomas Möbius
2
Nie ma więcej głosów pozytywnych, ponieważ pytanie zostało zadane w 2008 roku. :)
burnettk
dokładnie. Nie wyobrażam sobie vima w środowisku deweloperskim bez tych wtyczek.
Edgar Alloro
25

Rzeczy takie jak :ei :baddakceptują tylko JEDEN argument, dlatego poniższe nie powiedzie się

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

Jeśli chcesz dodać wiele plików z poziomu vima, użyj arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*
puk
źródło
21

Niektóre odpowiedzi w tym wątku sugerują użycie tabulatorów, a inne sugerują użycie bufora do osiągnięcia tego samego. Karty i bufory są różne. Zdecydowanie polecam przeczytanie tego artykułu „ Szaleństwo Vim Tab - Buffers vs. Tabs ”.

Oto ładne podsumowanie, które wyciągnąłem z artykułu:

Podsumowanie:

  • Bufor to tekst pliku w pamięci.
  • Okno to rzutnia w buforze.
  • Strona zakładki to zbiór okien.
Andrzej
źródło
2
Otrzymasz to podsumowanie pisząc :help windowVim
icc97
19

Używając wielu plików w vimie, używam głównie tych poleceń (przy otwartych plikach ~ 350):

  • :b <partial filename><tab> (przeskocz do bufora)
  • :bw (wyczyść bufor, usuń bufor)
  • :e <file path> (edytuj, otwórz nowy bufor>
  • pltags - umożliwia przejście do definicji podprogramu / metody
zigdon
źródło
2
350 plików !!! To imponujące. jak znaleźć odpowiedni bufor, do którego można przejść? Czy kiedykolwiek robisz podziały?
Brian O'Dell,
3
@ BrianO'Dell :b <partial filename><tab>plus set wildmenuw swoich .vimrcpracach dobrze, gdy masz mnóstwo buforów otwartych. Następnie po prostu częściowo dopasowujesz i przewijasz te, które znajdzie. W innych przyzwoitych edytorach masz rozmyte znalezisko, ale zwykle nie możesz ograniczyć tego rozmytego znalezienia tylko do plików, które otworzyłeś.
icc97
17

Dodanie kolejnej odpowiedzi, ponieważ żadna z odpowiedzi jej nie obejmuje

Aby zmienić wszystkie bufory do tabwyświetlenia.

 :tab sball

otworzy wszystkie bufory do widoku kart. Następnie możemy użyć dowolnych poleceń związanych z kartami

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

szczegóły na :help tab-page-commands.

Możemy poinstruować vima, aby otworzył, w widoku zakładki, wiele plików według vim -p file1 file2. alias vim='vim -p'będzie użyteczne.
To samo można również osiągnąć, wpisując polecenie automatycznego wydawania poleceń~/.vimrc

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

W każdym razie, aby odpowiedzieć na pytanie: Jak dodać do arg listy: arga file,

Aby usunąć z listy arg: argd pattern

Więcej w :help arglist

dlmeetei
źródło
16

Możesz chcieć używać globalnych znaków Vima .

W ten sposób możesz szybko podskakiwać między plikami, a nawet do zaznaczonej lokalizacji w pliku. Kluczowe polecenia są również krótkie: 'C zabiera mnie do kodu, z którym pracuję, 'T zabiera mnie do testu jednostkowego, z którym pracuję.

Gdy zmieniasz miejsca, resetowanie znaków jest również szybkie: mC oznacza nowe miejsce kodu, mT oznacza nowe miejsce testu.

użytkownik2179522
źródło
12

Używam tego samego pliku .vimrc dla gVim i wiersza poleceń Vim. Zwykle używam tabulatorów w gVim i buforów w wierszu poleceń Vim, więc mam skonfigurowane moje .vimrc, aby ułatwić pracę z nimi oboma:

" 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

Spowoduje to zablokowanie istniejących mapowań dla Hi L, ale sprawia, że ​​przełączanie między plikami jest niezwykle szybkie i łatwe. Po prostu naciśnij Hna następny i Lna poprzedni; bez względu na to, czy korzystasz z kart, czy z buforów, uzyskasz zamierzone wyniki.

Max Cantor
źródło
1
Lubię te mapowania. Spróbuj także Ctrl-H, Ctrl-L. Instaluję Firefox i terminal gnome z tymi samymi mapowaniami. Bardzo miło jest mieć spójne skróty klawiszowe.
cmcginty
4
użyj klucza wiodącego zamiast ctrl, aby uniknąć blokowania istniejących mapowań
aehlke,
10

Jeśli zamierzasz używać wielu buforów, myślę, że najważniejszą rzeczą jest ustawienie ukrytego, aby umożliwić zmianę buforów, nawet jeśli masz niezapisane zmiany w tym, który opuszczasz.

wcięcie
źródło
9

Jeśli używam tylko wbudowanych poleceń vima , najlepsze, jakie kiedykolwiek widziałem, aby przełączać się między wieloma buforami:

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

Doskonale łączy oba polecenia :lsi :bpolecenia - wyświetla listę wszystkich otwartych buforów i czeka na wprowadzenie polecenia zmiany bufora.

Biorąc pod uwagę powyższe mapowanie w vimrc, po wpisaniu <Leader>f,

  • Wyświetlane są wszystkie otwarte bufory
  • Możesz:
    • Wpisz, 23aby przejść do bufora 23,
    • Wpisz, #aby przejść do alternatywnego / MRU bufora,
    • Wpisz częściową nazwę pliku, a następnie wpisz <Tab>lub <C-i>do autouzupełniania,
    • Lub po prostu <CR>lub <Esc>pozostań na bieżącym buforze

Migawka danych wyjściowych dla powyższego mapowania klucza to:

: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'

W powyższej migawce:

  • Druga kolumna: %adla bieżącej, hdla ukrytej, #dla poprzedniej, pustej dla nie została przełączona na.
  • Trzecia kolumna: +do modyfikacji.

Również zdecydowanie sugeruję set hidden. Zobaczyć :help 'hidden'.

qeatzy
źródło
To świetny pomysł! Używam :bi :lsdużo, ale niezależnie. Myślę, że staje się to mniej przydatne, gdy masz więcej niż stronę buforów, ale nadal możesz po prostu wrócić do:b
icc97
Cieszę się, że to pomaga. Twoje zdrowie! :)
qeatzy
Z tej wiki Vima możesz ją nieco skrócić nnoremap <leader>f :ls<cr>:b<space>, co może jednak powodować problemy z poleceniem „więcej”
icc97
Tak, ten sposób działa idealnie, jeśli otwartych jest mniej plików (zwykły przypadek użycia). set morerzeczy mają znaczenie tylko wtedy, gdy otwartych jest wiele plików (więcej niż jedna strona), np. vim /usr/include/*choć mniej przydatne.
qeatzy
8

Korzystam z poniższych, daje to wiele funkcji, których można oczekiwać w innych edytorach, takich jak Sublime Text / Textmate

  1. Używaj buforów, a nie „stron kart”. Bufory są takie same jak tabulatory w prawie wszystkich innych edytorach.
  2. Jeśli chcesz taki sam wygląd posiadania kart można użyć vim-Airline wtyczki z następującym ustawieniu w twojej .vimrc: let g:airline#extensions#tabline#enabled = 1. Spowoduje to automatyczne wyświetlenie wszystkich buforów jako nagłówków tabulatorów, gdy nie zostaną otwarte żadne strony tabulatorów
  3. Użyj vima-unimpaired Tima Pope'a, który daje [bi ]bdo przejścia odpowiednio do poprzednich / następnych buforów (plus cały szereg innych gadżetów)
  4. Miej set wildmenuprzy sobie, .vimrckiedy wpiszesz :b <file part>+ Tabdla bufora, otrzymasz listę możliwych buforów, których możesz używać strzałkami w lewo / w prawo do przewijania
  5. Użyj wtyczki vima-obsesji Tima Pope'a do przechowywania sesji, które ładnie się bawią linią lotniczą (miałem dużo bólu podczas sesji i wtyczek )
  6. Użyj wtyczki vima-octu Tima Pope'a . Działa to z natywnym, :Exploreale znacznie ułatwia pracę. Wystarczy wpisać, -aby otworzyć Eksploratora, który jest tym samym kluczem, aby przejść do katalogu w Eksploratorze. Sprawia, że ​​nawigacja jest szybsza (jednak z FZF rzadko tego używam)
  7. fzf (który można zainstalować jako wtyczkę vima) to także naprawdę potężny program do wyszukiwania rozmytego, którego można używać do wyszukiwania plików (i buforów). fzf gra również bardzo ładnie z fd (szybsza wersja find)
  8. Użyj Ripgrep z vim-ripgrep, aby przeszukać bazę kodu, a następnie możesz użyć :cdowyników, aby wyszukać i zamienić
icc97
źródło
fzf i fzf-vim zmieniły moje życie, nie mogę tego wystarczająco polecić. Działa również bardzo dobrze w systemie Windows, nawet w konsoli, aby rozmyte wyszukiwanie plików. W systemie Windows używaj backendu ripgrep (rg), który z mojego doświadczenia przewyższa wszelkie inne narzędzia find / grep (takie jak silversearcher lub de domyślnie wykrywają, że fzf używa iirc). Możesz go użyć do przeszukiwania dowolnej listy pozycji: ostatnio używanych plików, aktualnie otwartych buforów, linii w bieżącym buforze, linii w bazie kodów (cwd), znaczników, ... możesz łatwo zaprogramować własną listę wyszukiwania rozmytego. Tak dobrze! (Przyszedłem z CTRL-P i nigdy nie
oglądałem się za
7

Moim sposobem na efektywną pracę z wieloma plikami jest użycie tmux.

Pozwala dzielić okna pionowo i poziomo, jak w:

wprowadź opis zdjęcia tutaj

Mam go działającego w ten sposób na moich komputerach Mac i Linux i uważam, że jest lepszy niż natywny mechanizm przełączania okien, który jest dostępny (na komputerach Mac). Przełączanie jest dla mnie łatwiejsze i tylko dzięki tmux udało mi się uzyskać „nową stronę w tym samym bieżącym katalogu” na moim komputerze Mac (pomimo faktu, że wydaje się, że istnieją opcje otwierania nowych paneli w tym samym katalogu), który jest zaskakująco krytyczny kawałek. Błyskawicznie nowe okienko w bieżącej lokalizacji jest niezwykle przydatne. Metoda, która wykonuje nowe panele z tymi samymi kluczowymi kombinacjami dla obu systemów operacyjnych, jest dla mnie krytyczna i stanowi premię dla wszystkich za przyszłą kompatybilność osobistą. Oprócz wielu paneli tmux, próbowałem również użyć wielu zakładek, npwprowadź opis zdjęcia tutaj I wielu nowych okien, npwprowadź opis zdjęcia tutaji ostatecznie odkryłem, że wiele paneli tmux jest dla mnie najbardziej użytecznych. Jestem bardzo „wizualny” i lubię trzymać moje różne konteksty przede mną, połączone ze sobą jak szyby.

tmux obsługuje również panele poziome i pionowe, których starsze screennie działały (chociaż mac iterm2 mac wydaje się to wspierać, ale znowu, obecne ustawienie katalogu nie działało dla mnie). tmux 1.8

Michael Durrant
źródło
1
Musiałem lol, kiedy zobaczyłem twój sztuczny przykład „wielu okien”. Mam nadzieję, że nikt tak nie działa :-) W każdym razie używam kafelkowania wm, co jest jeszcze lepsze (zmieniłem z tmux na i3wm). Aby tylko uzupełnić odpowiedź.
lzap
1
Tmux jest niesamowity i używałem tego podejścia przez długi czas, ale utrudnia nawigację oraz kopiowanie i wklejanie między dwoma plikami.
neallred 18.01.16
1
Kiedyś to robiłem, ale posiadanie wielu buforów vima jest lepsze, gdy trzeba szarpać / wklejać
Titou
3

Używam wiersza poleceń i dużo git, więc mam ten alias w moim bashrc:

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

Spowoduje to otwarcie każdego nowego pliku na nowej karcie w istniejącym oknie i utworzenie jednego okna dla każdego repozytorium git. Więc jeśli otworzysz dwa pliki z repozytorium A i 3 pliki z repozytorium B, skończysz z dwoma oknami, jednym dla repozytorium A z dwiema zakładkami i jednym dla repozytorium B z trzema zakładkami.

Jeśli otwierany plik nie znajduje się w repozytorium git, przejdzie do domyślnego okna.

Do przeskakiwania między kartami używam tych mapowań:

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

Aby otworzyć wiele plików jednocześnie, należy połączyć to z jednym z innych rozwiązań.

Jens
źródło
3

Używam wielu buforów, które są ukryte w moim ~/.vimrcpliku.

Skrypt eksploratora mini-buforów jest również miły, aby uzyskać ładną, kompaktową listę twoich buforów. Następnie :b1lub :b2..., aby przejść do odpowiedniego bufora lub użyj eksploratora mini-buforów i tabuluj bufory.

projecktzero
źródło
2

wypróbuj następujące mapy, aby wygodnie edytować wiele plików

„podzielone okna

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

" krążyć po okolicy

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

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

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

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

użytkownik2663398
źródło
2

Zrobiłem bardzo prosty film pokazujący przepływ pracy, którego używam. Zasadniczo używam wtyczki Ctrl-P Vim i zamapowałem nawigację bufora na klawisz Enter.

W ten sposób mogę nacisnąć Enter w trybie normalnym, spojrzeć na listę otwartych plików (która pojawia się w małym nowym oknie u dołu ekranu), wybrać plik, który chcę edytować i ponownie nacisnąć Enter. Aby szybko przeszukać wiele otwartych plików, wystarczy wpisać część nazwy pliku, wybrać plik i nacisnąć Enter.

Nie mam wielu plików otwartych w filmie, ale staje się niezwykle pomocny, gdy zaczynasz mieć ich dużo.

Ponieważ wtyczka sortuje bufory według kolejności MRU, możesz po prostu nacisnąć dwukrotnie klawisz Enter i przejść do najnowszego edytowanego pliku.

Po zainstalowaniu wtyczki jedyną potrzebną konfiguracją jest:

nmap <CR> :CtrlPBuffer<CR>

Oczywiście możesz zmapować go na inny klucz, ale uważam, że mapowanie do wprowadzenia jest bardzo przydatne.

fede1024
źródło
2

Sugerowałbym użycie wtyczki

NERDtree

Oto link do github z instrukcjami.

Nerdtree

Używam vim-plug jako menedżera wtyczek, ale możesz także używać Vundle.

wtyczka vim

Vundle

thenakulchawla
źródło
2

U moich i wielu innych użytkowników vima najlepszą opcją jest

  • Otwórz plik za pomocą,

: e nazwa_pliku. rozszerzenie

A następnie wystarczy Ctrl + 6, aby przejść do ostatniego bufora. Lub zawsze możesz nacisnąć

: ls, aby wyświetlić bufor, a następnie zmień bufor za pomocą b, a następnie numeru bufora.

  • Wykonujemy podział pionowy lub poziomy za pomocą

: vsp dla podziału pionowego

: sp dla podziału poziomego

A potem, <C-W><C-H/K/L/j>aby zmienić podział pracy.

Możesz oczywiście edytować dowolny plik w dowolnej liczbie podziałów.

Lew
źródło
Proszę edytować swoje odpowiedzi, aby zapewnić, że poprawia po innych odpowiedzi już obecnych w tej kwestii.
hongsy
1

Kiedy zacząłem używać VIM, nie zdawałem sobie sprawy, że zakładki powinny być używane jako różne układy okien, a bufor służy do edycji / przełączania wielu plików między sobą. Właściwie na początku nie było nawet kart przed wersją 7.0 i właśnie otworzyłem jeden VIM w zakładce terminalu (w tym momencie korzystałem z terminalu gnome) i przełączałem się między kartami za pomocą alt + liczb, ponieważ myślałem, że używam poleceń takich jak : bufory,: bn i: bp były dla mnie za dużo. Kiedy VIM 7.0 został wydany, łatwiej mi zarządzać wieloma plikami i przestawić się na nie, ale ostatnio zdałem sobie sprawę, że buforowanie powinno zawsze być właściwą drogą, chyba że jedno: musisz go skonfigurować, aby działał poprawnie.

Wypróbowałem więc vim-airline i włączyłem wizualny pasek bufora na górnej zakładce, ale grafika miała problem z moim iTerm2, więc wypróbowałem kilka innych i wydaje się, że MBE działa najlepiej dla mnie. Ustawiłem także shift + h / l jako skróty, ponieważ oryginalne (przejście do nagłówka / końca bieżącej strony) nie są dla mnie bardzo przydatne.

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

Wydaje się być nawet łatwiejszy niż gt i gT, a: e jest łatwiejszy niż: tabnew. Uważam, że: bd nie jest tak wygodne jak: q chociaż (MBE ma z tym jakiś problem), ale myślę, że mogę żyć ze wszystkimi plikami w buforze.

superarts.org
źródło
0

jeśli korzystasz z systemu OSX i chcesz mieć możliwość klikania swoich kart, użyj MouseTerm i SIMBL (pobranych stąd ). Sprawdź także tę powiązaną dyskusję .

Kpt. Senkfuss
źródło
0

Większość odpowiedzi w tym wątku używa prostych poleceń vima, co oczywiście jest w porządku, ale pomyślałem, że udzielę obszernej odpowiedzi przy użyciu kombinacji wtyczek i funkcji, które uważam za szczególnie przydatne (przynajmniej niektóre z tych wskazówek pochodzą z pliku Gary'ego Bernhardta wskazówki nawigacyjne ):

  1. Aby przełączyć między dwoma ostatnimi plikami, naciśnij <leader>dwa razy. Polecam przypisanie <leader>do spacji:

    nnoremap <leader><leader> <c-^>
    
  2. Aby szybko poruszać się po projekcie, odpowiedzią jest rozmyte dopasowanie, takie jak CtrlP . Wiążę to, aby <leader>auzyskać szybki dostęp.

  3. W przypadku, gdy chcę zobaczyć wizualną reprezentację aktualnie otwartych buforów, korzystam z wtyczki BufExplorer . Proste ale efektywne.

  4. Jeśli chcę przeglądać system plików, skorzystałbym z wiersza poleceń lub zewnętrznego narzędzia (Quicklsilver, Afred itp.), Ale aby spojrzeć na obecną strukturę projektu, drzewo NERD jest klasyczne. Nie używaj tego zamiast 2jako głównej metody wyszukiwania plików. To naprawdę cię spowolni. Używam wiązania <leader>ff.

Powinny one wystarczyć do wyszukiwania i otwierania plików. Stamtąd oczywiście użyj podziałów poziomych i pionowych. Jeśli chodzi o podziały, uważam te funkcje za szczególnie przydatne:

  1. Otwórz nowe podziały w mniejszych obszarach, gdy nie ma wystarczającej ilości miejsca i rozszerz je w nawigacji. Tutaj można znaleźć komentarze na temat tego, co one dokładnie robią:

    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. Łatwo przechodź z podziału na podział:

    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>
    
Dionizy
źródło
0

Możesz być bezwzględny szaleniec i alias vimdo vim -pdodając w twojej .bashrc:

alias vim="vim -p"

Spowoduje to otwarcie wielu plików z powłoki na kartach, bez konieczności :tab ballpóźniejszego wywoływania z poziomu vima.

npit
źródło