: lire après le curseur au lieu de la ligne après


11

J'utilise :r !uuidgenfréquemment pour insérer un nouvel uuid dans le tampon. Cela fonctionne, mais j'essaye généralement d'insérer l'uuid entre les guillemets et d' :r !uuidgenimprimer l'uuid sur une nouvelle ligne.

Pour contourner ce problème, j'utilise actuellement un simple clavier:

nnoremap <C-u> mm:r!uuidgen<CR>dW"_dd`mp

Cette macro définit la marque mm, insère l'uuid r!uuidgen, supprime l'uuid inséré dW, supprime la ligne supplémentaire "_dd, revient à la marque BACKTICKmet enfin colle l'uuid p.

Existe-t-il un moyen de :rredresser le curseur sans cette macro / liaison de touches qui gaspille un registre?


1
Question SU , également avec des solutions de contournement comme celle-ci.
muru

Réponses:


8

Vous pouvez utiliser le registre d'expression "=et system():

<C-r>=system("uuidgen | tr -d '\n'")<CR>

Cela ressemblerait à cela dans un mappage en mode insertion:

inoremap <key> <C-r>=system("uuidgen | tr -d '\n'")<CR>

ou, avec un mappage d'expression:

inoremap <expr> <key> system("uuidgen \| tr -d '\n'")

5

Depuis le mode insertion, vous pouvez appuyer sur Ctrl-R, puis taper:

=system('uuidgen')

Notez que cela ajoutera une nouvelle ligne de fin, car c'est ce qui uuidgensort; pour résoudre ce problème, nous pourrions utiliser:

=system('uuidgen')[:-2]

Pour supprimer la nouvelle ligne.

De :help i_CTRL-R:

Insérez le contenu d'un registre. Entre la saisie de CTRL-R et le deuxième caractère, «» »s'affiche pour indiquer que vous devez saisir le nom d'un registre.

[..]

'=' le registre d'expression: vous êtes invité à saisir une expression (voir expression)

Pour lier cela à Ctrl-uvotre exemple, vous pouvez utiliser:

nnoremap <C-u> i<C-r>=system('uuidgen')[:-2]<CR><Esc>

2

Un de plus, avec :python:

:py import uuid, vim; vim.command(':normal i' + str(uuid.uuid1()))

Vous pouvez mapper comme:

:inoremap <key> <esc>:py import uuid, vim; vim.command(':normal a' + str(uuid.uuid1()))<cr>a

Les UUID sont générés par le module Python UUID .


1
Cependant, c'est une façon plutôt tordue de s'y prendre.
muru

0

C'est peut-être moins préférable que d'utiliser une solution pure-vim, cependant, si vous utilisez un gestionnaire d' extraits de code comme Ultisnips, vous pouvez essayer d' ajouter un extrait de code tel que le suivant:

snippet uuid "insert new uuid" w
`uuidgen`
endsnippet

De cette façon, vous pouvez taper uuidet frapper votre déclencheur de développement en mode insertion et uuidsera remplacé par la sortie de la commande shell appropriée. Bien sûr, cela peut être facilement adapté pour d'autres commandes et développé de manière puissante comme indiqué dans la documentation Ultisnips.

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.