: leer después del cursor en lugar de después de la línea


11

Utilizo con :r !uuidgenfrecuencia para insertar un nuevo uuid en el búfer. Esto funciona, pero generalmente intento insertar el uuid entre comillas e :r !uuidgenimprimo el uuid en una nueva línea.

Para solucionar este problema, actualmente estoy usando un mapa de teclas simple:

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

Esta macro establece la marca mm, inserta el líquido r!uuidgen, elimina el líquido insertado dW, elimina la línea extra "_dd, vuelve a la marca BACKTICKmy finalmente pega el líquido p.

¿Hay alguna manera de :rjusto después del cursor sin esta macro / combinación de teclas que desperdicia un registro?


1
Pregunta SU , también con soluciones como esta.
muru

Respuestas:


8

Puede usar el registro de expresión "=y system():

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

Se vería así en una asignación de modo de inserción:

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

o, con un mapeo de expresión:

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

5

Desde el modo de inserción, puede presionar Ctrl-Ry luego escribir:

=system('uuidgen')

Tenga en cuenta que esto agregará una nueva línea final, porque eso es lo que uuidgengenera; para solucionar esto, podríamos usar:

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

Para eliminar la nueva línea.

De :help i_CTRL-R:

Insertar el contenido de un registro. Entre escribir CTRL-R y el segundo carácter, se mostrará '"' para indicar que se espera que ingrese el nombre de un registro.

[..]

'=' el registro de expresión: se le solicita que ingrese una expresión (ver expresión)

Para vincular esto a Ctrl-usu ejemplo, puede usar:

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

2

Uno más, con :python:

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

Puedes mapear como:

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

Los UUID son generados por el módulo UUID de Python .


1
Sin embargo, esta es una forma bastante retorcida de hacerlo.
muru

0

Esto es quizás menos preferible que usar una solución de vim puro, sin embargo, si usa un administrador de fragmentos como Ultisnips, entonces podría intentar agregar un fragmento como el siguiente:

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

De esta manera, puede escribir uuidy presionar su disparador de expansión en modo de inserción y uuidserá reemplazado con la salida del comando de shell correspondiente. Esto, por supuesto, puede adaptarse fácilmente para otros comandos y ampliarse de manera poderosa como se describe en los documentos de Ultisnips.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.