Comment canaliser la sortie d'une commande shell dans un nouveau tampon dans Vim? Les éléments suivants ne fonctionneraient évidemment pas, mais vous pouvez voir où je veux en venir:
:!echo % | :newtab
Comment canaliser la sortie d'une commande shell dans un nouveau tampon dans Vim? Les éléments suivants ne fonctionneraient évidemment pas, mais vous pouvez voir où je veux en venir:
:!echo % | :newtab
Réponses:
Vous ne pouvez pas diriger la sortie d'une commande shell dans une commande qui crée un nouveau tampon, mais vous pouvez créer un nouveau tampon et lire la sortie d'une commande shell dans ce tampon avec une entrée sur la ligne de commande de Vim. Une version de travail de votre exemple serait
:tabnew | r !echo <c-r>=bufname("#")<cr>
Notez que le symbole de tuyau dans ce cas est un séparateur entre les commandes Vim ex, pas le tuyau du shell. Voir également
:help :tabnew
:help :r!
:help :bar
:r!echo
sans altérer le tampon.
Voici ce que je fais. Il est fait allusion dans les commentaires dans les réponses ci-dessus.
:new | r ! <cmd>
:new | r ! <cmd> # (# is replaced with filename)
Exemple 1 : recherchez tous les fichiers texte dans/tmp
:new | r ! find /tmp -name '*.txt'
Exemple 2 : vous modifiez le fichier foo.txt et vous souhaitez exécuter ls -la foo.txt
et obtenir la sortie dans un tampon:
:new | r ! ls -la #
Le #
est remplacé par le nom de fichier du tampon d'origine que vous modifiez. Ceci est particulièrement utile pour les commandes de contrôle de source ad hoc, par exemple
:new | r ! hg annotate -un #
:new
crée une scission horizontale, utilisez :vnew
si vous voulez une scission verticale à la place et :tabnew
pour un nouvel onglet.
:tabnew | enew | r ! <your shell cmd>
travaille pour moi.
Si vous avez vraiment besoin de stocker le résultat dans un nouveau tampon, mais que vous avez besoin des informations de l'ancien tampon actuel, vous pouvez soit utiliser system()
:
:let res = system('echo '.expand('%'))
:tabnew
:put=res
ou stockez le nom du tampon actuel pour plus tard :
:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>