39 votes

Laissez gVim toujours exécuter une seule instance

Existe-t-il un moyen de laisser gVim exécuter une seule instance, de sorte que lorsqu'un nouveau fichier est ouvert avec lui, il soit automatiquement ouvert dans un nouvel onglet dans l'instance en cours d'exécution?

Je sais que vous pouvez le faire en passant --remote-tab-silent mais je veux configurer gvim pour que cela devienne le comportement par défaut. c'est-à-dire que je veux taper gvim filename et le faire agir comme si je lui avais passé l'option --remote-tab-silent .

gVim 7.2

Éditer

Je suis sur windows (vista)

39voto

dbr Points 66401

Si vous utilisez le shell bash (sous Linux / OS X / en utilisant Cygwin) c'est pour vous ajouter le fichier ~/.bashrc :

 gvim () { command gvim --remote-silent "$@" || command gvim "$@"; }
 

Sous Windows, je pense que vous pourriez avoir un script batch gvim.bat pour obtenir le même résultat.

 gvim.exe -p --remote-tab-silent %1 %*
 

Si gvim.exe n'est pas sur votre chemin

 Run > Search "Environment"
 

Modifier la variable PATH pour l'utilisateur ou le système actuel.

11voto

Zsolt Botykai Points 20615

Cela dépend de votre système d'exploitation et de votre shell. En utilisant linux, vous pouvez toujours configurer un alias comme:

 alias gvim='gvim --remote-tab-silent'
 

dans votre .bashrc (si vous utilisez bash comme shell de connexion).

Sur Windows, voir le wiki Vim pour la solution: http://vim.wikia.com/wiki/Launch_files_in_new_tabs_under_Windows .

5voto

unop Points 96

J'ai trouvé l' --remote-tab-silent option dans un alias pour le travail, pour la plupart, sauf quand j'ai voulu passer des options à gvim (par exemple, gvim --serverlist) - dans ce cas, gvim traite l'option comme un littéral nom de fichier qui n'est pas bon que tout d'abord ce n'est pas ce que tu voulais, et d'autre part, vous devez nettoyer les tampons de votre maintenant entachée vim session.

Ce n'est pas pratique d'utiliser un alias ou de résoudre vim/gvim différemment pour certains cas comme les suivants.

  • gvim
  • gvim /path/to/files
  • gvim --serverlist
  • gvim -p /path/to/file1 /path/to/file2
  • gvim -t tag filename

Ma solution est la suivante script wrapper autour de gvim (~/.bin/gvim) que Tom Veiner donne à penser, mais cela ne fera que l'utilisation d'un serveur existant si aucun des arguments sont gvim des options - dans le cas contraire, un nouveau serveur est créé.

#!/usr/bin/perl

use v5.10;

sub gvim { exec { '/usr/bin/gvim' } '/usr/bin/gvim', @_; }

if (scalar @ARGV) {
  unshift @ARGV, '--remote-tab-silent' unless /^--?/ ~~ @ARGV;
  gvim @ARGV 
}
else {
  chomp(my $serverlist = `gvim --serverlist`);
  if (length $serverlist) {
    gvim '--remote-send', '<Esc>:tabnew<CR>'
  } else { gvim }
}

3voto

user2571881 Points 1787
 alias tvim="gvim --servername `gvim --serverlist | head -1` --remote-tab"
 

Cela fait que vim ouvre un nouveau fichier dans un nouvel onglet sur la même instance de vim. Source: http://eustaquiorangel.com/posts/477

2voto

alsuren Points 134

Je trouve souvent que je veux aller à un endroit spécifique dans un fichier. La seule façon que j'ai trouvée de le faire était:

 gvim --remote-send '^[:tabnew +$lineno $filename ^M'
 

^[ est esc (tapé ctrl-v esc) et ^M est enter (ctrl-v enter).

J'espère que cela t'aides. Si quelqu'un comprend comment utiliser --remote-expr, donnez-moi un cri.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X