Comment configurer l'ouverture de nouveaux onglets par défaut?

10

Lorsque j'ouvre vimavec plusieurs fichiers ( vim f1 f2 ...), comment puis-je les ouvrir directement dans des onglets, sans les utiliser -p?

Je cherche à séparer le comportement du shell du comportement vim, en supprimant les vimalias basés sur, etc. C'est pourquoi je préférerais ne pas utiliser d'alias, etc. (par conséquent, non -p).

Je suis sûr que celui-ci a été demandé sur quelques sites SE (comme SO ). Cependant, je ne suis pas en mesure de juger de la meilleure façon de procéder, alors j'espère également une note expliquant pourquoi une méthode suggérée est bonne.

Pour le poste SO particulier lié:

  • la réponse acceptée le fait tabpagemax=9999. Appelez cela un parti pris personnel, mais je vois une limite fixée à un grand nombre et je pense qu'il y a quelque chose qui ne va pas (ce que je ressentirais si je voyais chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • l'autre réponse conduit à ouvrir un onglet supplémentaire vide, tout en étant beaucoup plus concis.

    :autocmd VimEnter * argdo tabedit
    

J'espère une réponse qui n'a pas d'onglet supplémentaire ouvert et ne fixe pas de limite à une grande valeur (ou explique pourquoi ce n'est pas une mauvaise chose).

muru
la source
@OrangeTux J'ai posté dans l'esprit de la réponse de Gilles. Mais avec le downvote, je me demande ce que dirait Gilles à un post reliant un post existant?
muru
@Carpetsmoker Je n'ai pas vu la mise à jour de votre commentaire. Une page de tabulation vide n'est pas un gros problème lorsque vos sessions se terminent :qapar la force de l'habitude. Si c'est le seul avantage, j'irais avec l'autre, car cela semble plus simple.
muru
3
@muru WWGS? Avez-vous une raison de penser que les réponses sur Stack Overflow ne sont pas satisfaisantes? Si oui, expliquez cela dans votre question. Dans tous les cas, résumez les réponses SO dans votre question. Si cela mène à la question contenant sa propre réponse, ne postez pas.
Gilles 'SO- arrête d'être méchant'
@Gilles mis à jour. Je n'ai pas posté les commandes réelles, pensez-vous que je devrais?
muru

Réponses:

4

Après quelques expérimentations, j'ai trouvé que c'était le meilleur moyen; il doit se comporter comme vim -p:

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

Tout d'abord, tab allouvre toutes les entrées de la liste d'arguments ( :args) dans un onglet. La liste d'arguments est une liste de fichiers que vous avez transmis à Vim au démarrage. Et le tabfirsts'assure que le premier onglet est focalisé plutôt que le dernier (c'est facultatif).

Nous ne faisons rien de tout cela si &diffest défini; si c'est le cas, nous utilisons vimdiffou vim -d, où nous voulons avoir 2 fenêtres, et non 2 onglets.

Dans cette réponse, j'ai également écrit un peu sur la liste des arguments et tab allqui peut être d'intérêt.


Quelques notes sur les autres solutions:

  • tab ballouvre un onglet pour chaque entrée de la liste des tampons , pas la liste des arguments. Le "problème" est que la liste des tampons peut être enregistrée dans le fichier viminfo à la fermeture et restaurée au démarrage (si elle %est 'viminfo'activée, non activée par défaut). Donc, si vous tapez simplement, vimcela ouvrira ces fichiers. Je considère que cela n'est pas souhaité, même si je peux imaginer que certaines personnes le trouvent utile; alors utilisez ce que vous préférez.

  • set tabpagemax=9999n'est pas requis; la valeur par défaut est 10, et cela devrait être bien. Vous pouvez augmenter cela dans votre vimrc si vous en voulez plus, mais 9999c'est un nombre stupide. Si vous utilisez -p, vous obtenez également des tabpagemaxonglets. Donc, cela devrait respecter cela. N'oubliez pas que cela ouvrira (lira) un tampon au démarrage, donc c'est plutôt lent.

  • autocmd VimEnter * argdo tabeditest juste la même façon de dire tab all. Cependant, le tampon initial n'est pas effacé, vous vous retrouvez donc avec cet onglet supplémentaire ( tab allremplace tous les onglets). Pour résoudre ce problème, vous avez besoin de la solution de contournement dans la réponse de Josh Petrie.

Martin Tournoij
la source
2

Je pense que l'ajout de quelque chose comme ça à votre .vimrcpeut résoudre vos problèmes (notez cependant que je ne l'utilise pas réellement et que je n'ai fait que des tests minimes, cela peut faire des choses étranges dans certains cas):

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

autocmd VimEnter * call OpenArgumentsInTabs()

Comme vous l'avez noté, argdo tabeditvous laissera un onglet supplémentaire vide. Vous pouvez donc simplement fermer cet onglet automatiquement. Cependant, vous ne pouvez pas simplement invoquer tabclosenon coché, ou vim vous donnera une erreur lorsque vous le lancerez sans arguments ni fichier unique (vous "ne pouvez pas fermer le dernier onglet"). Au lieu de cela, vérifiez si le nombre total d'onglets est supérieur à un (c'est ce qui $provoque tabpagenrle retour) et ce n'est qu'alors que vous devez fermer le dernier onglet.


Cela dit, je pense qu'il vaut la peine de souligner que les onglets de vim ne sont pas tout à fait comme les onglets des autres éditeurs , et c'est quelque chose à garder à l'esprit lorsque vous envisagez d'utiliser les onglets dans votre flux de travail (vous semblez être au courant de cela, mais je veulent faire le point au profit des futurs lecteurs qui pourraient ne pas le faire afin qu'ils puissent prendre leurs propres décisions).

Communauté
la source