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?

deshmukh
la source
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.

Steve Kroon
la source
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.

devav2
la source
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>
Kenorb
la source
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