web-dev-qa-db-fra.com

MacVim Ouvrir un fichier dans une fenêtre existante

Existe-t-il un moyen de configurer MacVim pour ouvrir un nouveau fichier dans la fenêtre actuelle dans une instance MacVim en cours d'exécution? J'ai actuellement la préférence MacVim "Ouvrir de nouveaux fichiers dans un nouvel onglet dans la fenêtre courante", mais idéalement, j'aimerais simplement ouvrir de nouveaux fichiers de la façon dont ": e new_file" fonctionne, sans les onglets.

Ma principale motivation est que j'utilise actuellement NERDTree et Bufexplorer pour mon flux de travail et que je n'ai pas du tout besoin des onglets. J'utilise également PeepOpen, ce qui est génial sauf qu'il ouvre toujours les fichiers en fonction des préférences de MacVim, donc le mieux que je puisse faire est de le faire ouvrir dans la fenêtre MacVim actuelle avec un nouvel onglet.

50
davertron
  1. Mettre à jour vers MacVim 7.3
  2. Allez dans les préférences générales
  3. Sous "Ouvrir les fichiers depuis les applications:" choisissez "dans la fenêtre courante"
  4. Dans le menu déroulant sous cette option, sélectionnez "et définissez l'arglist"
51
Björn Winckler

Vous pouvez également ajouter:

alias mvim='open -a MacVim'

à ton .bash_profile

Cela me semble être la solution la plus simple.

28
Dan

Vous pouvez également envisager cette astuce pour éditer le script mvim principal.

Amélioration de mvim pour MacVim

Cette modification est un peu moins sévère et fonctionne également:

MacVim prend en charge les onglets, mais malheureusement, appeler `mvim plusieurs fois à partir de la ligne de commande entraîne l'ouverture de plusieurs fenêtres séparées, au lieu de plusieurs onglets dans une seule fenêtre. J'ai apporté les modifications suivantes au script mvim pour corriger cela.

Ajoutez la ligne suivante en haut du fichier, sous la section commentée:

tabs=true

Remplacez la structure if en bas du fichier par ce qui suit:

# Last step:  fire up vim.
if [ "$gui" ]; then
  if $tabs && [[ `$binary --serverlist` = "VIM" ]]; then
    exec "$binary" -g $opts --remote-tab-silent ${1:+"$@"}
  else
    exec "$binary" -g $opts ${1:+"$@"}
  fi
else
  exec "$binary" $opts ${1:+"$@"}
fi

(from Ouvrir les onglets MacVim à partir de la ligne de commande )

De toute évidence, ce sont tous les deux un peu sous-optimaux car vous devrez maintenir le hack lorsque vous effectuez une mise à jour MacVim. Mais ils m'ont beaucoup aidé à ouvrir plusieurs fichiers à partir du terminal dans les nouveaux onglets Mac Vim.

15
bryan kennedy

J'utilise personnellement une commande comme celle-ci, après avoir tout vu ici et avoir tenté d'expérimenter ce que

mvim --help 

est arrivé.

Je l'ai trouvé

mvim --remote-tab-silent foo.txt

a travaillé pour moi, puis j'ai rapidement ajouté un alias à mon .profile. Oui, il barfs si vous ne lui donnez pas un fichier après l'option, mais qui ouvre un fichier vierge sans nom de toute façon?

15
jmorriscal

La réponse de @ Björn Winckler vous montre comment le faire pour les fichiers ouverts via Finder et d'autres mécanismes d'ouverture du système d'exploitation.

Si vous voulez que cela fonctionne avec la commande mvim, recherchez le fichier mvim et changez les lignes en bas de

if [ "$gui" ]; then
    # Note: this isn't perfect, because any error output goes to the
    # terminal instead of the console log.
    # But if you use open instead, you will need to fully qualify the
    # path names for any filenames you specify, which is hard.
    exec "$binary" -g $opts ${1:+"$@"}
else
    exec "$binary" $opts ${1:+"$@"}
fi

à

if [ "$gui" ]; then
  # Note: this isn't perfect, because any error output goes to the
  # terminal instead of the console log.
  # But if you use open instead, you will need to fully qualify the
  # path names for any filenames you specify, which is hard.

  #make macvim open stuff in the same window instead of new ones
  if $tabs && [[ `$binary --serverlist` = "VIM" ]]; then
    exec "$binary" -g $opts --remote ${1:+"$@"}
  else
    exec "$binary" -g $opts ${1:+"$@"}
  fi
else
  exec "$binary" $opts ${1:+"$@"}
fi

Cela ouvrira également tous les fichiers ouverts à partir de la ligne de commande dans la même fenêtre.

Aussi si vous souhaitez que le fichier ouvre le même tampon si ce fichier est déjà ouvert au lieu de le fractionner ou d'ajouter un nouvel onglet

au VimEnter,BufWinEnter * NERDTreeFind à votre gvimrc (pour ne pas interférer avec votre vim habituel)

(cette dernière partie nécessite l'installation de NERDTree)

4
Will

Voici comment j'ai accompli ceci:

Dans VIM, il y a une commande "tabo", qui fait de l'onglet actuel le seul onglet. J'ai ajouté ce qui suit à mon ~/.vimrc:

autocmd BufWinEnter,BufNewFile * silent tabo

Cela fait que chaque fois que je crée un nouveau tampon ou entre un nouveau tampon, l'onglet actuel devient automatiquement le seul onglet. Cette commande n'affecte pas mes tampons, donc l'effet est exactement ce que je veux: ouvrir un fichier dans l'instance actuelle de MacVim et n'ajouter aucun nouvel onglet.

1
davertron

J'ai trouvé la réponse d'Azriel excellente, mais cela ne fonctionne pas si le fichier n'existe pas. Cette petite fonction fait la même chose mais vous pouvez également créer de nouveaux fichiers.

mvim () { touch "$@" && open -a MacVim "$@"; }

Ajoutez-le simplement dans votre .bash_profile. Vous pouvez ensuite modifier un nouveau fichier foo comme

mvim foo

et il s'ouvrira dans un nouvel onglet.

1
Erik Henriksson