¿Existe un acceso directo para reutilizar el término de búsqueda de buscar y reemplazar?

8

Creo que existe una clara posibilidad de que esta pregunta ya se haya formulado, pero no puedo encontrarla.

Si estoy haciendo algo así :s/foo/bar/gy luego quiero volver a llamar a eso en la siguiente línea, pero con en bazlugar de bar, ¿hay una forma más rápida de hacerlo? Siento que &bazdebería funcionar, pero no es así.

Eli Sadoff
fuente

Respuestas:

11

No es exactamente lo que pides, pero puedes hacerlo:

:s/foo/bar/g

Y entonces:

:s//baz/g

Puede usar eso porque cuando usa :sel patrón buscado se guarda en el registro de búsqueda. Con lo que puedes ver :reg /.


Trabajo en progreso: puede acelerar su flujo de trabajo con:

nnoremap && :s<UP><C-F>F/cT/

Y úsalo así:

:s/foo/bar/g

y entonces

&&baz<CR>

Descomponiendo:

nnoremap &&         " define a new mapping
:s<UP>              " get the last :s command in the history
<C-F>               " use this command in the cmdline window
F/                  " go back to the last /
cT/                 " change back up to the last /

Algunas notas:

  • Esto no funcionará si no tienes ninguna bandera
  • Esto no funcionará si no tiene una cadena sustituta
  • Se debe trabajar de otro modo

(Avísame si puedo mejorarlo).

Alguna lectura:

  • :h cmdline-window
  • :h c_CTRL-F
nobe4
fuente
2
Eso es definitivamente mejor que lo que estaba haciendo antes. Supongo que desafortunadamente puede que no haya una forma más rápida :(.
Eli Sadoff
No que yo sepa, y yo estoy tratando de crear una asignación, que hace lo que quiere, pero fuera de la caja estoy bastante seguro de que está limitado a teclear de nuevo la expresión sustituto
nobe4
5

Además de la respuesta de @nobe4, Damian Conway tiene dos mapas bastante interesantes para acelerar la búsqueda y reemplazar las acciones. Vienen de esta forma en la que visito la entrevista, que vale la pena leer por completo.

Para citarlo:

[...] Descubrí que siempre estaba haciendo búsquedas y reemplazos globales (es decir :%s/X/Y/g<CR>), así que eliminé la escritura repetitiva al robar el Scomando nunca usado (por mí) :

nmap  S  :%s//g<LEFT><LEFT>

Ahora solo necesito escribir: SX / Y

Pero luego comencé a darme cuenta de la frecuencia con la que buscaba algún patrón / y después de haber examinado los partidos, quería sustituirlos a nivel mundial. Incluso con el mapeo S que fue una repetición más molesta: primero haga la búsqueda: / patrón y luego reemplace: Spattern / reemplazo Entonces robé el comando M (que nunca he usado) para eso:

nmap <expr>  M  ':%s/' . @/ . '//g<LEFT><LEFT>'

Ahora es solo: haga la búsqueda: / patrón y luego reemplace todas las coincidencias: Mreplacement


Para responder a su pregunta, supongo que podría modificar ligeramente la primera asignación para algo como esto:

nmap  S  :s///g<LEFT><LEFT>

De esta manera, primero puede hacer su sustitución :s/foo/bar/g, ir a la siguiente línea, presionar Sy obtendrá: :s//|/gdonde |está el cursor, ahora puede escribir su nueva sustitución.

statox
fuente