web-dev-qa-db-fra.com

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

Dans vim, quand j'utilise

:r !ls somefilename

il insère la sortie de cette commande sur une nouvelle ligne en dessous de la ligne en cours.

Si je fais

let @a = system("ls")

et ensuite

"ap

il insère toujours la sortie sur une nouvelle ligne en dessous de la ligne en cours.

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

29
deshmukh

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 devriez ê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 aname__. Vous pouvez ensuite le coller (en mode insertion) avec ^R-a.

13
Steve Kroon
:r !command 

lit le résultat de la commande et l'insère dans la ligne située sous la ligne en cours. C'est comme cela que vi est programmé, vous ne pouvez pas changer le comportement.

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

Si vous souhaitez que la valeur de date apparaisse sur la ligne numéro 3, essayez :2r !date et insérez la valeur de date dans la ligne numéro 3.

39
devav2

Voici un autre moyen de coller la sortie d'une commande externe avant le curseur:

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

ou utilisez le registre d'expression (:help @=):

"=system('ls -la')

puis frappé P. Ou plus court chemin par:

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