Puedo usar
:5,12s/foo/bar/g
para buscarlo fooy reemplazarlo barentre las líneas 5 y 12. ¿Cómo puedo hacer eso solo en las líneas 5 y 12 (y no en las líneas intermedias)?
Vim tiene átomos especiales de expresión regular que coinciden en ciertas líneas, columnas, etc .; puede usarlos (posiblemente además del rango) para limitar las coincidencias:
:5,12s/\(\%5l\|\%12l\)foo/bar/g
Ver :help /\%l
Puede hacer la sustitución en la línea 5 y repetirla con un mínimo esfuerzo en la línea 12:
Como señala Ingo, se
:&olvida de sus banderas. Dado que está utilizando/g, el comando correcto sería:&&:Ver
:help :&y amigos.fuente
:&utilizar lo oscuro . Si hay banderas (s/../../g), uno tiene que usar:&&, aunque ...\(\%5l\|\%12l\)es más oscuro que:&Siempre puedes agregar un
cal final. Esto pedirá confirmación para todos y cada uno de los partidos.fuente
gbandera en juego)n5 o 6 veces es más oneroso que agregar\(\%5l\|\%12l\)a la declaración sustituta?Interesante pregunta. Parece que solo hay selección de rango y no selección de línea múltiple:
http://vim.wikia.com/wiki/Ranges
Sin embargo, si tiene algo especial en las líneas 5 y 12, puede usar el
:goperador. Si su archivo se ve así (números solo como referencia):Y desea reemplazar
oneporenoen las líneas donde hay enenillugar deline:fuente
Podría usar
ed: un editor de texto orientado a líneas con comandos similares a vi y vim. Probablemente sea anterior a vi y vim.En un script (usando un documento aquí que procesa la entrada hasta el marcador EndCommand) se vería así:
Obviamente, los comandos ed también se pueden usar en la línea de comandos.
fuente
vimalternativa.:s, pero aún existe la duplicación del:scomando (que evita la solución de romainl).sedembargo, mi preferencia sería ...