Comment exécuter le fichier que j'édite dans Vi (m) et obtenir la sortie dans une fenêtre fractionnée (comme dans SciTE)?
Bien sûr, je pourrais l'exécuter comme ça:
:!scriptname
Mais est-il possible d'éviter d'écrire le nom du script et comment obtenir la sortie dans une fenêtre fractionnée au lieu juste en bas de l'écran?
:!"%:p"
pour faire face aux espaces.Réponses:
Il y a la
make
commande. Il exécute la commande définie dans l'makeprg
option. À utiliser%
comme espace réservé pour le nom de fichier actuel. Par exemple, si vous éditiez un script python:Oui, vous devez vous échapper de l'espace. Après cela, vous pouvez simplement exécuter:
Si vous le souhaitez, vous pouvez définir l'
autowrite
option et elle sera automatiquement enregistrée avant d'exécuter lemakeprg
:Cela résout la partie d'exécution. Je ne connais aucun moyen d'obtenir cette sortie dans une fenêtre fractionnée qui n'implique pas de redirection vers un fichier.
la source
:copen
pour ouvrir la "liste des erreurs" produite en exécutant:make
.dans sa propre fenêtre. Malheureusement, pour que la sortie soit formatée correctement, certaines modifications de l'errorformat
option sont nécessaires. Sinon, la sortie sera présumée être au format émis par gcc.:let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
) bien que semble cryptique, fonctionne exactement comme demandé par l'auteur de la question.Pour accéder au nom de fichier du tampon actuel, utilisez
%
. Pour l'intégrer dans une variable, vous pouvez utiliser laexpand()
fonction. Pour ouvrir une nouvelle fenêtre avec un nouveau tampon, utilisez:new
ou:vnew
. Pour diriger la sortie d'une commande vers le tampon actuel, utilisez:.!
. Mettre tous ensemble:remplaçant évidemment
ruby
par la commande que vous voulez. J'ai utiliséexecute
pour que je puisse entourer le nom de fichier avec des guillemets, donc cela fonctionnera si le nom de fichier contient des espaces.la source
:command! R let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
pour pouvoir simplement utiliser:R
pour exécuter sa commandeVim a une commande
!
("bang") qui exécute la commande shell directement depuis la fenêtre VIM. De plus, il permet de lancer une séquence de commandes qui sont connectées avec pipe et lisent stdout.Par exemple:
équivaut à ouvrir la fenêtre d'invite de commande et à lancer des commandes:
Voir "Astuces Vim: Travailler avec des commandes externes" pour plus de détails.
la source
J'ai un raccourci pour cela dans mon vimrc:
Cela écrit le tampon actuel, rend le fichier actuel exécutable (unix uniquement), l'exécute (unix uniquement) et redirige la sortie vers .tmp.xyz, puis crée un nouvel onglet, lit le fichier puis le supprime.
Décomposer:
la source
:w<CR>:silent !chmod +x %:p<CR>:silent !%:p 2>&1 | tee ~/.vim/output<CR>:split ~/.vim/output<CR>:redraw!<CR>
- cela redirige à la fois stdout et stderr vers le fichier temporaire, et avant de le faire, il imprime tout sur stdout, donc si un script prend du temps à s'exécuter, vous le voyez réellement fonctionner. En outre, il est indépendant du répertoire (j'obtenais des erreurs lors de l'ouverture des fichiers par leur chemin absolu). Cependant, il n'exécute pas de scripts de manière interactive et je n'ai pas trouvé de moyen de le faire.Pour le script Shell, j'ai utilisé
la source
Vim 8 a un terminal interactif intégré. Pour exécuter le script bash actuel dans un volet divisé:
ou pour faire court
%
se développe au nom de fichier actuel.De
:help terminal
:la source
J'utilise un mécanisme un peu plus intrusif à travers les cartes:
Cela fait simplement que je n'ai pas à économiser, alors partez. Juste aller.
la source
Vous pouvez utiliser le plugin bexec de vim . À ma connaissance, la dernière version est la 0.5.
Ensuite:
À l'intérieur de vim lui-même lors de l'édition du fichier .vba, procédez comme suit:
Une sortie s'affichera pour vous informer que bexec.vim a été écrit ainsi que la documentation, etc.
Maintenant, vous pouvez le tester en ouvrant votre (quel que soit le script de langue qui a un interpréteur #! Fonctionnant correctement) dans vim et exécutez
Remarque: je voulais que la division soit verticale plutôt qu'horizontale, alors j'ai fait:
et a changé la valeur de "hor" à "ver".
Je sais que c'est une vieille question, mais j'espère que cela peut aider quelqu'un là-bas. J'ai couru dans le même problème en suivant le cours d'ingénierie de démarrage de Coursera où le professeur Palaji utilise Emacs et je n'aime pas Emacs.
la source
Sur la base des réponses @SethKriticos et @Cyril, j'utilise maintenant les éléments suivants:
Utilisez F9 pour configurer la nouvelle fenêtre et F2 pour exécuter votre script et té vers votre fichier de sortie.
J'ai également ajouté le nom du script au nom du fichier de sortie, afin que vous puissiez l'utiliser pour plusieurs scripts en même temps.
la source
Dans votre
.vimrc
vous pouvez coller cette fonctionAprès cela, dans
vim
commande d'exécution:shell python ~/p.py
comme exemple. Et vous obtiendrez la sortie dans une fenêtre fractionnée. + Après des modifications dans l'p.py
exemple, vous exécuterez à nouveau la même commande, cette fonction ne créera plus de nouvelle fenêtre, elle affichera le résultat dans la (même) fenêtre fractionnée précédente.la source
@xorpaul
Je cherchais ce script (python / Windows) depuis un certain temps. Comme il n'y a pas de "tee" dans Windows, je l'ai changé en:
la source
Utilisez simplement deux points et un point d'exclamation comme indiqué ci-dessous
la source
Je recommanderais le plugin quickrun . C'est simple et rapide à configurer. Voici une petite démonstration:
la source