web-dev-qa-db-fra.com

Ouvrir des fichiers dans Gvim existant dans plusieurs (nouveaux) onglets

J'ai mis quelques alias dans mon .bashrc pour ouvrir un groupe de fichiers de projet dans gvim, chacun dans leur propre onglet:

gvim -p <list of file names using absolute paths>

C'est très bien, sauf qu'il y a plusieurs groupes de fichiers que je pourrais vouloir déplacer à tout moment (mon projet actuel utilise Ruby sur Rails, donc cela explique cela). être vraiment génial, c'est si je pouvais ajouter les nouveaux onglets à une instance existante de gvim. Dans ma dernière position, je travaillais sur Vista; j'ai contourné cela en ouvrant un tas d'onglets vides dans gvim, ce qui m'a permis de faire un clic droit sur un nom de fichier et choisissez "Ouvrir dans gvim No-Name existant." Maintenant, j'utilise Ubuntu et il n'y a rien de tel dans le menu contextuel. Existe-t-il un moyen de le faire à partir de la ligne de commande?

43
kajaco

Si vim est compilé avec l'option clientserver , vous pouvez le faire. Démarrez votre instance vim avec le drapeau suivant:

$ gvim --servername GVIM  # GVIM is the server name. It can be anything.

Pour ouvrir plus d'onglets dans cette instance, vous pouvez exécuter la commande:

$ gvim --servername GVIM --remote-tab file1 file2 file3 ...

La fonction clientserver de vim est très pratique. Cela ne se limite pas à l'ouverture de fichiers; il peut être utilisé pour envoyer n'importe quelle commande à vim en utilisant la ligne de commande. Par exemple, pour fermer une instance de vim à distance, vous pouvez utiliser:

$ gvim --servername GVIM --remote-send '<Esc>:wqa<CR>'
70
Ayman Hourieh

Depuis l'intérieur de Gvim, tapez :tabe {file_name}. Cela ouvre le fichier nommé dans un nouvel onglet. Si vous n'aimez pas taper de longs noms de fichiers, essayez ceci:

:tabnew
:e .

Cela ouvrira une nouvelle page à onglet vierge et ouvrira un navigateur de fichiers. Vous pouvez cliquer avec la souris sur votre chemin ou utiliser le clavier. Cliquez ou appuyez sur la touche Entrée du fichier que vous souhaitez ouvrir. Essayez d'utiliser le clavier pour positionner le curseur sur le fichier que vous souhaitez ouvrir, puis appuyez sur "t". Cela ouvre le fichier sélectionné dans un nouvel onglet, en gardant le navigateur de fichiers ouvert dans le premier onglet. Cela pourrait être un moyen rapide d'ouvrir un tas de fichiers.

Il y a beaucoup de choses que vous pouvez faire avec les onglets qui pourraient vous faciliter la vie. Pour accéder à la section appropriée du manuel d'aide en ligne de Vim, tapez :h tabpage.

20
Steve K

Vous voulez que votre menu contextuel Windows vous permette d'ouvrir des fichiers dans un nouvel onglet de la fenêtre gvim actuellement ouverte?

Enregistrez-le sous un fichier appelé temp.reg et double-cliquez dessus pour ajouter les paramètres à votre registre. Assurez-vous de modifier le chemin d'accès à vim si le vôtre est différent.

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim]
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim\command]
@="\"C:\\Program Files (x86)\\Vim\\vim73\\gvim.exe\" -p --remote-tab-silent \"%1\" \"%*\""

Vous aurez maintenant un menu contextuel comme celui-ci:

vim context menu

12
matt burns

Les utilisateurs de Linux peuvent utiliser ce type de script:

#!/bin/bash

ANS=`pgrep -fx "gvim --servername GVIM"`

echo $@

if [[ ! $ANS ]]; then
    gvim --servername GVIM
fi

if [[ $1 ]]; then
    gvim --servername GVIM --remote-tab "${@}"
fi

Et puis éditez le fichier gvim.desktop pour utiliser ce script:

Exec=/home/user/bin/my_gvim_script.sh %F
6
Jan Valiska

Voici mon script de démarrage gvim. Il s'agit d'une extension des réponses précédentes. Il garantit qu'une seule instance gvim s'exécutera lorsque gvim sera appelée en toutes circonstances:

  • gvim est appelé sans nom de fichier lorsqu'aucune instance gvim n'est en cours d'exécution; gvim est démarré.
  • gvim est appelé sans nom de fichier en présence d'une instance gvim; un nouvel onglet vide est ouvert.
  • gvim est appelé avec un nom de fichier avec ou sans instance gvim; un onglet s'ouvre affichant le fichier.

Cela imitera le comportement standard des autres éditeurs.

#!/bin/bash
exec=/usr/bin/gvim  #the path to gvim
if [ $# -eq 0 ]
  then  # no filename given
    if [ -z $($exec --serverlist) ]
      then  # no filename given and no gvim instance
        $exec -f --servername GVIM > /dev/null 2>&1
      else  # no filename given, but a gvim instance exists
        $exec -f --servername GVIM --remote-send ':tabnew<CR>' > /dev/null 2>&1
    fi
  else  # filenames given
    $exec -f --servername GVIM --remote-tab "$@" > /dev/null 2>&1
fi
1
Serge Stroobandt

Il y a un moyen:

n*.cpp|tab ba

ou si vous aimez diviser:

n*.cpp|sba

Si vous souhaitez en savoir plus:

:help ba

et je ne sais pas ce qui est n, mais cela ne fonctionnerait pas sans lui.

1
user1021852