: leggi dopo cursore anziché dopo riga


11

Uso :r !uuidgenfrequentemente per inserire un nuovo uuid nel buffer. Funziona, ma generalmente sto cercando di inserire l'UUID tra virgolette e lo :r !uuidgenstampa su una nuova riga.

Per aggirare questo problema, sto attualmente usando una semplice mappa di tasti:

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

Questa macro imposta il segno mm, inserisce l'UUID r!uuidgen, elimina l'UUID inserito dW, elimina la linea aggiuntiva "_dd, torna al segno BACKTICKme infine incolla l'UUID p.

C'è un modo per :rseguire subito il cursore senza questa macro / keybinding che spreca un registro?


1
Domanda SU , anche con soluzioni alternative come questa.
Muru,

Risposte:


8

È possibile utilizzare il registro delle espressioni "=e system():

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

Sembrerebbe che in una mappatura della modalità di inserimento:

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

oppure, con una mappatura delle espressioni:

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

5

Dalla modalità di inserimento, puoi premere, Ctrl-Rquindi digitare:

=system('uuidgen')

Si noti che ciò aggiungerà una nuova riga finale, perché è ciò che uuidgenproduce; per risolvere questo problema, potremmo usare:

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

Per rimuovere la nuova riga.

Da :help i_CTRL-R:

Inserisci il contenuto di un registro. Tra la digitazione di CTRL-R e il secondo carattere, verrà visualizzato "" 'per indicare che è necessario immettere il nome di un registro.

[..]

'=' il registro delle espressioni: viene richiesto di inserire un'espressione (vedere espressione)

Per associare questo Ctrl-ucome il tuo esempio, puoi usare:

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

2

Ancora uno, con :python:

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

Puoi mappare come:

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

Gli UUID sono generati dal modulo UUID Python .


1
Questo è un modo piuttosto contorto di procedere, però.
Muru,

0

Questo è forse meno preferibile rispetto all'utilizzo di una soluzione pure-vim, tuttavia, se si utilizza un gestore snippet come Ultisnips, è possibile provare ad aggiungere uno snippet come il seguente:

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

In questo modo è possibile digitare uuide premere il trigger di espansione in modalità inserimento e uuidverrà sostituito con l'output del relativo comando shell. Questo, ovviamente, può essere facilmente adattato per altri comandi e ampliato in modo potente come indicato nei documenti di Ultisnips.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.