Wie mache ich das Öffnen neuer Registerkarten zum Standard?


10

Wie kann ich beim Öffnen vimmit mehreren Dateien ( vim f1 f2 ...) diese direkt in Registerkarten öffnen, ohne sie zu verwenden -p?

Ich vimmöchte das Shell-Verhalten vom Vim-Verhalten trennen, Aliase auf Basis usw. entfernen . Deshalb würde ich es vorziehen, keine Aliase usw. zu verwenden (daher nein -p).

Ich bin mir ziemlich sicher, dass dieser auf einigen SE-Sites (wie auf SO ) gefragt wurde . Ich bin jedoch nicht in der Lage zu beurteilen, wie dies am besten funktioniert, und hoffe daher auch auf einen Hinweis, warum eine vorgeschlagene Methode gut ist.

Für den jeweiligen SO-Beitrag verlinkt:

  • Die akzeptierte Antwort tut es tabpagemax=9999. Nennen wir es persönliche Voreingenommenheit, aber ich sehe, dass eine große Zahl begrenzt ist, und ich denke, dass etwas nicht stimmt (wie ich mich fühlen würde, wenn ich es sehen würde chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • Die andere Antwort führt dazu, dass eine zusätzliche leere Registerkarte geöffnet wird, während sie weitaus präziser ist.

    :autocmd VimEnter * argdo tabedit
    

Ich hoffe auf eine Antwort, bei der kein zusätzlicher Tab geöffnet ist und kein Limit für einen großen Wert festgelegt ist (oder erklären Sie, warum das keine schlechte Sache ist).



@OrangeTux Ich habe im Geiste von Gilles 'Antwort gepostet. Aber mit der Ablehnung frage ich mich, was Gilles zu einem Beitrag sagen würde, der auf einen vorhandenen Beitrag verweist?
Muru

@Carpetsmoker Ich habe Ihr Kommentar-Update nicht gesehen. Eine leere Registerkarte ist kein großes Problem, wenn Ihre Sitzungen :qaaus Gewohnheit enden . Wenn das der einzige Vorteil ist, würde ich mich für den anderen entscheiden, da es einfacher erscheint.
Muru

3
@muru WWGS? Haben Sie Grund zu der Annahme, dass die Antworten zu Stack Overflow nicht zufriedenstellend sind? Wenn ja, erklären Sie das in Ihrer Frage. Fassen Sie in jedem Fall die SO-Antworten in Ihrer Frage zusammen. Wenn dies dazu führt, dass die Frage eine eigene Antwort enthält, posten Sie nicht.
Gilles 'SO - hör auf böse zu sein'

@ Gilles aktualisiert. Ich habe die eigentlichen Befehle nicht gepostet. Glaubst du, ich sollte?
Muru

Antworten:


4

Nach einigen Experimenten habe ich festgestellt, dass dies der beste Weg ist. es sollte sich genauso verhalten wie vim -p:

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

Zuerst tab allöffnet alle Einträge in der Argumentliste ( :args) in einer Registerkarte. Die Argumentliste ist eine Liste der Dateien, die Sie beim Start an Vim übergeben haben. Und das tabfirststellt sicher, dass die erste Registerkarte fokussiert ist und nicht die letzte (dies ist optional).

Wir machen nichts davon, wenn &diffgesetzt ist; Wenn dies der Fall ist, verwenden wir vimdiffoder vim -d, wo wir 2 Fenster und nicht 2 Registerkarten haben möchten .

In dieser Antwort habe ich auch ein wenig über die Argumentliste geschrieben, tab alldie von Interesse sein könnte.


Einige Hinweise zu den anderen Lösungen:

  • tab ballöffnet eine Registerkarte für jeden Eintrag in der Pufferliste , nicht für die Argumentliste. Das „Problem“ ist , dass die Pufferliste kann auf verlassen und wieder beim Start in der viminfo Datei gespeichert werden (sofern %in ist 'viminfo', nicht standardmäßig aktiviert). Wenn Sie also nur eingeben vim, werden diese Dateien geöffnet. Ich halte dies für unerwünscht, obwohl ich mir vorstellen kann, dass einige Leute es nützlich finden. Verwenden Sie also, was Sie bevorzugen.

  • set tabpagemax=9999ist nicht nötig; Die Standardeinstellung ist 10, und dies sollte in Ordnung sein. Sie können dies in Ihrem vimrc erhöhen, wenn Sie mehr wollen, aber es 9999ist eine dumme Zahl. Wenn Sie verwenden -p, erhalten Sie auch tabpagemaxRegisterkarten. Das sollte das also respektieren. Denken Sie daran, dass dies beim Start einen Puffer öffnet (liest), der also ziemlich langsam ist.

  • autocmd VimEnter * argdo tabeditist genau die gleiche Art zu sagen tab all. Der anfängliche Puffer wird jedoch nicht gelöscht, sodass Sie diese zusätzliche Registerkarte behalten ( tab allersetzt alle Registerkarten). Um dies zu beheben, benötigen Sie die Problemumgehung in Josh Petries Antwort.


2

Ich denke, dass das Hinzufügen von so etwas zu Ihrem .vimrcProblem Ihre Probleme lösen kann (beachten Sie jedoch, dass ich dies nicht wirklich verwende und nur minimale Tests durchgeführt habe, es kann in einigen Fällen seltsame Dinge bewirken):

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

autocmd VimEnter * call OpenArgumentsInTabs()

Wie Sie bereits bemerkt haben, argdo tabeditverbleibt eine leere zusätzliche Registerkarte. Sie können diese Registerkarte also einfach automatisch schließen. Sie können jedoch nicht einfach tabcloseungeprüft aufrufen , oder vim gibt einen Fehler aus, wenn Sie es ohne Argumente oder eine einzelne Datei starten (Sie können die letzte Registerkarte nicht schließen). Überprüfen Sie stattdessen, ob die Gesamtzahl der Registerkarten größer als eins ist (dies $führt tabpagenrzur Rückkehr), und erst dann müssen Sie die letzte Registerkarte schließen.


Trotzdem sollte ich darauf hinweisen, dass die Registerkarten von vim nicht ganz den Registerkarten anderer Editoren entsprechen. Dies sollten Sie berücksichtigen, wenn Sie überlegen, wie Sie Registerkarten in Ihrem Workflow verwenden (Sie scheinen sich dessen bewusst zu sein, aber ich möchten den Punkt zum Nutzen zukünftiger Leser machen, die dies möglicherweise nicht tun, damit sie ihre eigenen Entscheidungen treffen können).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.