Insérer la sortie d'une commande système à l'emplacement actuel dans vim


33

En vim, quand j'utilise

:r !ls somefilename

il insère la sortie de cette commande sur une nouvelle ligne sous la ligne actuelle.

Si je fais

let @a = system("ls")

et ensuite

"ap

il insère toujours la sortie sur une nouvelle ligne sous la ligne actuelle.

Existe-t-il un moyen de créer une sortie d'insertion vim à l'emplacement actuel?


Reportez-vous à cette réponse utile Exécuter la ligne actuelle en bash depuis vim
Rohan Ghige

Réponses:


14

Vous pouvez coller le contenu du tampon du presse-papiers entre les caractères avec Ctrl-R * en mode insertion (et une approche similaire pour les autres tampons). Donc, si vous pouvez obtenir la commande système dans un tampon, vous devez être défini. (Source: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).

:let @a=system("ls -l") mettra la sortie de ls -l dans le registre a. Vous pouvez ensuite le coller (en mode insertion) avec ^R-a.


En outre, sur la plupart des plates-formes, le presse-papiers est synchronisé avec un registre (généralement *), donc si vous dirigez la sortie de votre commande vers votre presse-papiers, "*vous pourrez l'utiliser.
Bruno Bronosky

39
:r !command 

va lire la sortie de la commande et l'insérer dans la ligne sous la ligne actuelle. C'est ainsi que vi est programmé, vous ne pouvez pas changer le comportement.

Mais dites si vous êtes sur la ligne numéro 3. Si vous essayez :r !date . Il insérera la valeur de la date dans la ligne numéro 4.

Si vous souhaitez que la valeur de date apparaisse sur la ligne numéro 3, vous essayez d' :2r !dateinsérer la valeur de date dans la ligne numéro 3.


4
Cela s'insère sur une ligne différente, mais toujours sur une ligne qui lui est propre. Je veux l'insérer à l'emplacement actuel!
deshmukh

13

Voici une autre façon de coller la sortie d'une commande externe avant le curseur:

:exe 'norm i' . system("ls -l")

ou utilisez expression register ( :help @=):

"=system('ls -la')

puis frappez P. Ou de façon plus courte en:

<CTRL-R>=system('ls -la')<CR>

4
C'est la réponse
Jacob

1
D'accord! Cela devrait vraiment être la bonne réponse, car elle inclut une solution plus programmatique (avec :exe) qui peut être incluse dans les commandes.
métasoarous
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.