Wielowarstwowe widoki Vima (Windows, bufory i karty) wprawiły mnie w trochę zagubienia. Powiedzmy, że podzielę ekran (: sp), a następnie wybieram inny bufor do wyświetlenia w każdym oknie. Teraz chcę zamknąć jeden z buforów, ale nie chcę, aby okno się zamykało (po zamknięciu może wyświetlić następny bufor na liście lub pusty bufor, to nie ma znaczenia). W jaki sposób mogę to zrobić?
Dzięki.
DeleteCurBufferNotCloseWindow()
działa dobrze i jest całkiem czytelny . (Zastrzeżenie: moja odpowiedź)Odpowiedzi:
Na wiki Vima jest skrypt, który to robi. Nie sądzę, że istnieje wbudowany system, który robi to, co chcesz.
Najnowsza wersja vim-bufkill jest na github .
źródło
Trochę się z tym pogodziłem i w końcu wymyśliłem:
Oto wersja kopiuj / wklej do mapowania klawiszy:
Sporo go przetestowałem i działa niezmiennie w różnych warunkach. Użyty na ostatnim buforze pozostawi nowy pusty bufor.
Wrzuć to do swojego .vimrc:
Zrestartuj Vima lub po prostu,
:source ~/.vimrc
aby zmiany odniosły skutek. Następnym razem, gdy chcesz zamknąć bufor, po prostu wpisz:\q
(jeśli\
jest to twój klucz lidera)źródło
map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>
. Zrestartuj VIM, następnym razem, gdy chcesz zamknąć bufor, po prostu wpisz:\q
sp
).sp
się navsp
. mój wpis .vimrc wygląda tak:cnoremap bd bp<bar>vsp<bar>bn<bar>bd
Szukałem tego dzisiaj i wymyśliłem
:b#|bd#
co zmienia bieżące okno na poprzednio otwarty bufor i usuwa / ukrywa bufor, z którego właśnie się wyłączyłeś.
Wymaga to co najmniej dwóch znanych buforów.
Jeśli inne okno, ale bieżące, pokazuje ten sam bufor, nadal zniszczy to podział. Możesz zmienić wszystkie okna na poprzednio otwarty bufor za pomocą
:windo b#
Dodałem więcej szczegółów na temat poprzedniego polecenia, omawiając jego mapowanie (i niektóre pułapki) w odpowiedzi na podobne pytanie .
źródło
:#b|#bd
Wystarczy zamienić polecenie bufora i numer bufora w powyższym.:bn|bd#
albo:bp|bd#
zamiast przejść do poprzedniego lub następnego otwartej bufora, odpowiednio, zamiast niż bufor ty ostatnio obejrzano (B #).Działa tak, jak powinno, dopóki jeden bufor nie zostanie otwarty w kilku oknach. Wystarczająco dobre, chyba że chcesz używać większych skryptów.
Edycja: tego właśnie teraz używam:
źródło
nmap <leader>d :ene<CR>:bd #<CR>
Myślę, że właśnie tego szukasz
http://www.vim.org/htmldoc/windows.html#window-moving
Spróbuj tego:
Sprawdź swój identyfikator bufora za pomocą
zobaczysz tam listę buforów
jeśli chcesz usunąć b.py z bufora
jeśli chcesz usunąć / zamknąć wszystkie bufory
źródło
Dla tych, którzy używają NERDTree.
Naprawiam to za pomocą tej wtyczki https://github.com/jistr/vim-nerdtree-tabs i teraz mogę zamknąć jedyny buff / plik / kartę bez zamykania okna.
Po zainstalowaniu powyższej wtyczki umieść następujący kod na moim .vimrc:
Opis powyższej zmiennej to: Zamknij bieżącą kartę, jeśli jest w niej tylko jedno okno i jest to NERDTree (domyślnie 1)
Więcej informacji tutaj: https://github.com/jistr/vim-nerdtree-tabs#configuration
źródło
Nie sądzę, aby można to zrobić w jeden sposób, ale możesz to zrobić
:enew
lub:ls
wyświetlić listę buforów i zamienić na inny za pomocą:b [number]
.Gdy masz inny bufor w oknie
:bd #
, usuniesz poprzedni bufor w oknie, a ponieważ bieżący bufor nadal istnieje, okno nie zostanie zamknięte.źródło
Zwykłem używać :
Ale znalazłem pewne sytuacje, w których zamykało moje okno.
Niedawno zauważyłem, że zawsze używam tego, gdy pracuję nad projektem i muszę szybko otworzyć mój
.tmux.conf
.zshrc
przed powrotem do pracy.W tym przypadku uważam, że lepiej:
C-6
:bd#
, aby usunąć poprzedni bufor (Mam odwzorowane to tak:nnoremap <leader>d :bd#<CR>
)Pozwala mi kontrolować bufor, do którego wracam, i jest bardziej naturalny.
źródło
By
rób co chcesz? będzie edytować nowy, nienazwany bufor w bieżącym oknie, pozostawiając istniejący plik otwarty w innych oknach.
źródło
Moim ulubionym rozwiązaniem jest wtyczka bufkill.vim ( GitHub ). Udostępnia alternatywne wersje różnych
:b
poleceń -prefix, które działają tak samo, jak ich odpowiedniki, ale pozostawiają otwarte okno. Wyświetlają ostatni widoczny bufor lub pusty / nowy bufor, jeśli nie było poprzedniego bufora.Z dokumentacji:
źródło
Aby „zamknąć” widok, użyj
:hid[e]
. Działa, jeśli udało ci się podzielić rzutnię lub otworzyć wiele plików. Nie możesz ukryć ostatniego bufora na wyświetlaczu.1 Kolejna wskazówka, która mi pomogła: użyj,
:e ./path/to/file.work
aby otworzyć plik w rzutni bez dzielenia okna.PS Po dwóch dniach od uruchomienia Vima nadal mam problem ze znalezieniem dokładnych poleceń pomocy. Miejmy nadzieję, że pomoże to komuś innemu pracować, dopóki naprawdę nie będzie miał czasu na zrozumienie vima.
źródło
Oto bardzo czytelna funkcja vimscript, która dobrze obsługuje wszystkie przypadki ,
:bd
(jeśli tylko jedno okno, po prostu je wywołaj!),:enew
.buffer-list
, przełącz się na niego, w przeciwnym razie przejdź dalej, przez:bn
.źródło
Jeśli jesteś podobny do mnie i przyszedłeś tutaj, próbując zrobić odwrotnie , zamknij okno bez zamykania bufora, możesz to zrobić za pomocą:
:close
źródło
Prosta wersja, której osobiście używam, to
Przechodzi do poprzedniego bufora i usuwa drugi bufor (który w rzeczywistości jest oryginałem, z którego skoczyliśmy). Robi to, czego można się spodziewać w 99% przypadków bez żadnych skomplikowanych skryptów.
Jako skrót klawiaturowy używam następującego
źródło
użyj ": bd" jako polecenia.
źródło