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.