Comment vider une commande vim interne (pas une commande shell) dans un nouveau tampon?
Par exemple, je veux vider une liste de tous les plug - ins dans :enew
de :scriptnames
sorte que je puisse le fouiller.
la source
Comment vider une commande vim interne (pas une commande shell) dans un nouveau tampon?
Par exemple, je veux vider une liste de tous les plug - ins dans :enew
de :scriptnames
sorte que je puisse le fouiller.
Vous pouvez utiliser :redir
pour rediriger la sortie vers une variable, un registre ou un fichier. Exemple de redirection vers le registre sans nom:
:redir @">|silent scriptnames|redir END|enew|put
Alternativement, scriptease.vim de Tim Pope fournit la :Scriptnames
commande qui se chargera :scriptnames
dans la liste des correctifs rapides et :copen
.
Si vous vous retrouvez en train de rediriger de nombreuses commandes, vous voudrez peut-être résumer cela dans une commande:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
Vous pouvez maintenant utiliser la :Redir
commande pour rediriger la sortie vers un nouveau tampon. par exemple :Redir scriptnames
ou :Redir ls
.
Vim 8 est livré avec la nouvelle execute()
fonction. Vous pouvez utiliser la execute()
fonction à au lieu de :redir
pour capturer la sortie de l'ex-commande.
:enew|pu=execute('scriptnames')
Pour plus d'aide, voir:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
END
dire?:redir END
indique à Vim de mettre fin à la redirection des messages. Voir:h :redir
Pour être complet, je veux présenter ces fonctions impressionnantes que j'ai collectées (volées) de romainl
Cela prendra la sortie de commande normale ou système et la placera dans un nouvel onglet. N'hésitez pas à changer la ligne
tabnew
envsplit
ousplit
etc.la source
Il y a aussi le plugin bufferize.vim :
qui est essentiellement une version packagée de la réponse acceptée (en utilisant
:redir
) et peut être plus pratique pour certains.la source