Vim: Pipe texte sélectionné pour shell cmd et recevez une sortie sur vim info/ligne de commande
Je veux des tuyaux sur le texte sélectionné pour une commande shell et de recevoir une ligne de sortie de cette commande shell sur le vim info/ligne de commande?
Ce que je suis vraiment essayer de faire: Pipe le texte sélectionné pour un pastebin-type de commande shell et je veux recevoir la sortie de la shell cmd (qui est le lien http sur le pastebin). Est-ce possible?
- Liés à des questions de fournir le texte sélectionné comme
STDIN
de commandes shell: le Remplacement de l'original sélectionné de texte avec la sortie et la Tuyauterie et de la coquille, en travaillant avec l'ensemble des tampons
Vous devez vous connecter pour publier un commentaire.
Je voudrais faire comme ceci:
Placer cette fonction dans votre vimrc:
Ce qui vous permettra d'appeler cette fonction en faisant:
Alors vous pouvez aussi la carte qui ressemble à ceci (juste en vertu de la déclaration de la fonction dans votre vimrc):
De sorte que vous pouvez appeler la fonction pour ce faire:
Remarque:
:<','>
sont les sélecteurs de plage, afin de produire eux il suffit de sélectionner les lignes en mode visuel puis passez en mode commande (en appuyant sur le côlon clé)xclip -o
?sh </code>"$paste\n$data"
?echo system('pbcopy', join(getline(a:firstline, a:lastline), "\n"))
Pour le multi version en ligne vous pouvez le faire après avoir sélectionné le texte:
Vous pouvez l'associer à de simples visual mode de raccourci comme ceci:
Frappé leader clé + c en mode visuel pour envoyer le texte sélectionné pour une stdin de la commande. la sortie standard de la commande sera imprimé sous vim barre d'état de l'.
L'exemple du monde réel avec CoffeeScript:
https://github.com/epeli/vimconfig/commit/4047839c4e1c294ec7e15682f68563a0dbf0ee6d
:w
va remplacer la sélection avec la sortie de la commande.:w
. Est-il normal de commande "write"? Quelle est la deuxième:
pour? Pouvez-vous l'expliquer? Merci!xnoremap <expr> <Leader>c "\<Esc>:'<,'>:w !" . getbufvar('%', 'run_command', &filetype) . "\<CR>"
.. Il utilise le tampon defileype
comme la commande, qui fonctionne bien avec de nombreux langages (ruby
,python
, etc.). Vous pouvez modifier ce réglage parb:run_command
ce qui est utile pour le code incorporé dans des fichiers Markdown et ces.:help :w
, spécifiquement:help :w_c
.Il suffit de sélectionner les lignes à l'aide de visual ligne sélectionnez l'option shift-v, le coup :! et tapez la commande que vous souhaitez envoyer des commandes. Le résultat sera alors remplacer le texte sélectionné.
Lorsque vous tapez votre commande, il apparaît au fond comme:
le '< " > indique que la plage que vous avez sélectionnées visuellement sera transmis à la commande spécifiée après la !
sh
exécutera l'ensemble de la ligne que la commande shell. Par exemple.:'<,'>!sh
Peut-être que vous devriez utiliser quelque chose comme
À partir de quelques vim-version 7.4 il est préférable d'utiliser
. C'est la seule façon de garder le NUL octets intacte doivent-elles être présentes dans le fichier. En passant
@"
dans l'une ou l'autre façon de transformer NUL octets en NL (saut de ligne).E481: No range allowed
:call system('YourCommand', @")
. Un mappage de faire le nécessaire yank pour vous. Tous ensemble, ça ressemble à:map <silent> <Leader>y "9y:call system('YourCommand', @")<CR>
Le point principal est quesystem()
prend un 2ème argument, qui est écrit dans le programme sur stdin, de sorte qu'il évite d'échapper à tous les problèmes.@"
n'est pas la meilleure idée. Voir mise à jour de réponse.@matias 's solution est de ne pas bien fonctionner pour moi, car il semble
shellescape
ajouter\
à chaque ligne.Donc j'utilise
sed
pour ce faire, et il fonctionne très bien!Une autre réponse:
Nécessite le support de python. L'utiliser comme matias fonction.