substitute – ¿Sustituto de opción múltiple?

Pregunta:

Normalmente, un sustituto con la opción c me da dos opciones: (y) es o (n) o. ¿Es posible tener varias opciones de sí numeradas para elegir?

Ejemplo

Archivo

person: Alice
dog: Tobby
person: Bob

Patrón 1 :%s/person:/woman:/c

Patrón 2 :%s/person:/man:/c

Los patrones 1 y 2 tienen el mismo patrón de búsqueda pero diferentes patrones de reemplazo. Quiero unificarlos en un patrón con la opción de presionar (1) para reemplazar 1, (2) para reemplazar 2 o (n) para no reemplazar.

Respuesta:

La implementación de :s//c es fija; lo que está buscando es un reemplazo con una expresión de Vimscript ( :help sub-replace-expr ). Puede consultar un solo dígito a través de getchar() , o solicitar números más largos a través de input() :

:%s/person:/\=get(['woman', 'man'], getchar() - char2nr(1), submatch(0)) . ':'/
:%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/

Puede ingresar un número más alto ( 3 en su ejemplo) para no realizar ningún reemplazo.


Si necesita esto a menudo, tendría sentido definir una función Query() para eso. Allí, también puede agregar un :redraw , para que vea los reemplazos que ya han sucedido.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım