Jak ustawić domyślne otwieranie nowych kart?

10

Kiedy otwieram za vimpomocą wielu plików ( vim f1 f2 ...), jak mogę je otworzyć bezpośrednio na kartach, bez użycia -p?

Chcę oddzielić zachowanie powłoki od zachowania vima, usuwanie vimaliasów opartych na itp. Dlatego wolałbym nie używać aliasów itp. (Stąd nie -p).

Jestem prawie pewien, że ten został zadany na kilku stronach SE (takich jak SO ). Jednak nie jestem w stanie ocenić, jaki byłby najlepszy sposób, aby to zrobić, więc mam też nadzieję, że dostanę informację, dlaczego sugerowana metoda jest dobra.

Dla konkretnego linku do SO:

  • zaakceptowana odpowiedź tak tabpagemax=9999. Nazwij to osobistym uprzedzeniem, ale widzę limit ustawiony na dużą liczbę i myślę, że coś jest nie tak (tak, jak bym się czuł, gdybym to zobaczył chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • druga odpowiedź prowadzi do otwarcia dodatkowej pustej zakładki, a jednocześnie jest bardziej zwięzła.

    :autocmd VimEnter * argdo tabedit
    

Mam nadzieję na odpowiedź, która nie ma otwartej dodatkowej karty i nie ustawia limitu dużej wartości (lub wyjaśni, dlaczego to nie jest złe).

muru
źródło
@OrangeTux Wysłałem w duchu odpowiedzi Gillesa. Ale przy przeglądzie zastanawiam się, co powiedziałby Gilles do posta prowadzącego do istniejącego postu?
muru
@Carpetsmoker Nie widziałem aktualizacji Twojego komentarza. Pusta strona nie jest dużym problemem, gdy sesje kończą się :qanawykiem. Jeśli to jedyna zaleta, skorzystałbym z drugiej, ponieważ wydaje się to prostsze.
muru
3
@muru WWGS? Czy masz powód, by sądzić, że odpowiedzi na temat przepełnienia stosu nie są zadowalające? Jeśli tak, wyjaśnij to w swoim pytaniu. W każdym razie podsumuj odpowiedzi SO w swoim pytaniu. Jeśli prowadzi to do pytania zawierającego własną odpowiedź, nie publikuj.
Gilles „SO- przestań być zły”
@Gilles Zaktualizowano. Nie opublikowałem rzeczywistych poleceń, myślisz, że powinienem?
muru

Odpowiedzi:

4

Po kilku eksperymentach uznałem, że jest to najlepszy sposób; powinien zachowywać się tak samo jak vim -p:

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

Najpierw tab allotwiera wszystkie wpisy na liście argumentów ( :args) na karcie. Lista argumentów to lista plików, które przekazałeś Vimowi podczas uruchamiania. I tabfirstzapewnia, że ​​pierwsza karta jest skoncentrowana, a nie ostatnia (jest to opcjonalne).

Nie robimy tego, jeśli &diffjest ustawiony; jeśli tak, używamy vimdifflub vim -d, gdzie chcemy mieć 2 okna, a nie 2 zakładki.

W tej odpowiedzi napisałem również trochę o liście argumentów i tab allktóre mogą być interesujące.


Kilka uwag na temat innych rozwiązań:

  • tab ballotwiera zakładkę dla każdego wpisu na liście buforów , a nie na liście argumentów. „Problem” polega na tym, że lista buforów może zostać zapisana w pliku viminfo przy wychodzeniu i przywrócona podczas uruchamiania (jeśli %jest 'viminfo'włączona, domyślnie nie jest włączona). Więc jeśli tylko wpiszesz vim, otworzy te pliki. Uważam to za niepożądane, choć mogę sobie wyobrazić, że niektórzy uważają to za przydatne; więc użyj tego, co wolisz.

  • set tabpagemax=9999Nie jest wymagane; domyślnie jest 10i powinno być dobrze. Możesz zwiększyć to w swoim vimrc, jeśli chcesz więcej, ale 9999jest to głupia liczba. Jeśli używasz -p, dostajesz także tabpagemaxzakładki. To powinno to uszanować. Pamiętaj, że spowoduje to otwarcie (odczyt) bufora podczas uruchamiania, więc jest raczej powolny.

  • autocmd VimEnter * argdo tabeditto tylko ten sam sposób powiedzenia tab all. Jednak początkowy bufor nie jest czyszczony, więc pozostała Ci ta dodatkowa karta ( tab allzastępuje wszystkie karty). Aby to naprawić, potrzebujesz obejścia w odpowiedzi Josha Petrie.

Martin Tournoij
źródło
2

Myślę, że dodanie czegoś takiego do twojego .vimrcmoże rozwiązać twoje problemy (pamiętaj jednak, że tak naprawdę nie używam tego i wykonałem jedynie minimalne testy, w niektórych przypadkach może to robić dziwne rzeczy):

function! OpenArgumentsInTabs()
  ardo tabedit
  if tabpagenr("$") > 1
    tabclose
  endif
endfunction

autocmd VimEnter * call OpenArgumentsInTabs()

Jak zauważyłeś, argdo tabeditpozostawi ci pustą dodatkową kartę. Możesz więc po prostu automatycznie zamknąć tę kartę. Jednak nie możesz po prostu wywołać tabcloseniezaznaczonego, ponieważ vim wyświetli błąd podczas uruchamiania bez argumentów lub pojedynczego pliku („nie możesz zamknąć ostatniej karty”). Zamiast tego sprawdź, czy łączna liczba kart jest większa niż jedna (to $powoduje tabpagenrpowrót) i dopiero wtedy musisz zamknąć ostatnią kartę.


To powiedziawszy, wydaje mi się, że warto podkreślić, że zakładki Vima nie są do końca podobne do zakładek innych edytorów , i to jest coś, o czym należy pamiętać, rozważając sposób używania zakładek w twoim przepływie pracy (wydaje się, że jesteś tego świadomy, ale ja chcą wskazać na korzyść przyszłych czytelników, którzy mogą tego nie zrobić, aby mogli podejmować własne decyzje).

Społeczność
źródło