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?
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 a
name__. Vous pouvez ensuite le coller (en mode insertion) avec ^R-a
.
: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.
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>