Ostatnio drastycznie zmniejszam liczbę wtyczek, których używam, więc szukam odpowiedzi za pomocą tylko wbudowanych funkcji Vima.
Podczas edytowania wielu buforów zauważyłem błąd w przepływie pracy: korzystam z bufora i chcę przejść na inny, z którego nie pamiętam nazwy i który nie jest alternatywnym buforem . Tak więc używanie :b#
nie jest możliwe, a używanie uzupełniania za pomocą polecenia również :b
nie jest wygodne.
Aby to zrobić, wykonałem następujące czynności:
- Najpierw użyj,
:buffers
aby uzyskać listę otwartych buforów - Zapamiętaj numer bufora, którego chcę użyć
- Naciśnij, Enteraby zamknąć listę buforów
- Użyj
:bX
zX
numerem używanego bufora.
Ten przepływ pracy wydawał mi się dość ciężki, dlatego dodałem następujące wiersze do mojego
.vimrc
:
" Improve the navigation in the buffers
nnoremap <Leader><S-b> :B<CR>
command! B call Buffers()
function! Buffers()
execute "buffers"
let buffer=input("Enter a buffer:")
execute "b" . buffer
endfunction
To daje mi polecenie :B
(i mapowanie), które wywołują funkcję, :buffers
czekają na dane wejściowe i na koniec wywołują :b
dane wejściowe.
Działa dobrze, ale jestem zaskoczony, że musiałem opracować taką funkcję: zwykle Vim ma dość wydajny domyślny przepływ pracy, więc zastanawiam się, czy istnieje lepszy sposób na przejście do bufora, o którym nie wiem nic poza wyjątkiem że został już otwarty w mojej sesji edytorskiej.
:ls
nim następuje:b#
(nie muszę najpierw naciskać Return ani Escape, mogę przejść bezpośrednio z listy buforów w „ls”). (Publikowanie jako komentarz, ponieważ nie wydaje się wystarczająco istotne, aby być odpowiedzią? Zastanawiam się również, czy ja coś mi brakuje i odpowiadam na złe pytanie.):b#
nie szukam tego, ale tak, fakt, że można zapisać naciśnięcie klawisza, wprowadzając bezpośrednio:b
bez naciskaniaenter
wcześniej, jest interesujący. (Rzeczywiście to może być zbyt lekkie, aby być odpowiedzią, ale warto było skomentować :-))#
postać jako zastępstwo dla liczby (buforowej), a nie dosłownie#
.Odpowiedzi:
Wręcz przeciwnie, uznaję uzupełnianie za pomocą tabulacji za niezwykle wygodne. Ustawienie odpowiednich opcji dla wartości, które działają dla Ciebie, może bardzo pomóc. Oto odpowiednie wiersze z mojego
vimrc
(działają dla mnie, ale mogą nie działać dla ciebie, więc nie kopiuj ich) :Dzięki temu odpowiedni bufor rzadko znajduje się w odległości większej niż pięć lub sześć naciśnięć klawiszy:
Barry Arthur wymyślił wiele lat temu znacznie prostsze rozwiązanie, które od tego czasu stało się dość popularne:
z czego kilka lat temu zaproponowałem nieco bardziej wszechstronny wariant:
Ponieważ mówimy o vimscript, oto miła mała funkcja, którą napisałem, że „automatycznie wypełnia” wiersz polecenia odpowiednim skrótem polecenia po poleceniach podobnych do list, takich jak
:ls
lub:ilist
. Zaletą tej funkcji nad powyższymi mapowaniami jest to, że nie muszę pamiętać konkretnych mapowań. Działa podobnie jak Vim, ale z niewielką zmianą .To powiedziawszy, jestem wielkim zwolennikiem „nawigacji opartej na symbolach” zamiast „nawigacji opartej na plikach”. W stosownych przypadkach nawigacja oparta na symbolach jest znacznie szybsza i bardziej ekonomiczna niż nawigacja oparta na plikach.
Nawiasem mówiąc, ostatni GIF pokazuje jeden sposób nawigacji opartej na symbolach. Przykład jest głupi, ale… no cóż.
źródło
wild*
opcjami, postaram się to poprawić. Jeśli chodzi o rozwiązanie Barry Arthur, jest ono bardzo zbliżone do interesującej odpowiedzi @ nobe4. Wreszcie będę musiał głębiej przyjrzeć się twojejCCR()
funkcji, aby naprawdę ją zdobyć, ale wygląda obiecująco. Dziękuję za odpowiedź.Jakiś czas temu napotkałem ten sam problem i znalazłem rozwiązanie:
Spowoduje to otwarcie listy buforów i bez ukrywania jej, umożliwi Ci przełączenie bufora.
Myślę, że to ma sens, że Vim nie ma tutaj opcji „lista i wybranie”, są to dwie osobne akcje. Ale Vim jest wystarczająco potężny, aby połączyć dowodzenie razem.
Pomyśl o tym jak o filozofii Uniksa: zrób jedną rzecz i zrób to dobrze.
:buffers
wyświetla listę buforów i:buffer xxx
pozwala wybrać jeden.źródło
Ale ostatnio znalazłem najszybszą metodę z najmniejszą liczbą naciśnięć klawiszy :
{count} CTRL-^
Nie różni się to tak bardzo,
:b#<Enter>
ale, jak mówisz, musisz znać numer bufora!W tym celu uruchamiam wtyczkę MiniBufExplorer , która wyświetla listę nazw plików u góry (jak prawie każdy inny edytor). Jestem pewien, że istnieje wiele alternatyw.
Wreszcie, ponieważ Ctrl-^moje palce są trochę rozciągnięte i jest to bardzo częsta operacja, przeniosłem ją na Ctrl-E. Implementacja że nie jest zbyt skomplikowane:
Mój obecny proces przełączania bufora przebiega mniej więcej tak:
Niestety MBE i powyższy skrypt nie są wbudowanymi funkcjami Vima, tak jak prosiłeś. Kiedy jestem na zdalnym komputerze bez konfiguracji, po prostu używam
:b [partial]
i Tab-uzupełniania.źródło