¿Cómo pego la misma línea de código X veces pero cambio una palabra en la línea cada vez?

8

Estoy escribiendo listas HTML y quiero poder pegar automáticamente 10 elementos de la lista donde el texto del elemento es lo único que cambia.

Podría lograr esto usando PHP y luego simplemente copiando el código HTML representado, pero si hay una manera de omitir ese paso y hacerlo directamente desde Vim, eso me ahorraría mucho tiempo.

Azmodeo
fuente
44
Eche un vistazo al complemento github.com/mattn/emmet-vim , puede satisfacer sus necesidades. De lo contrario, puede usar una macro para hacerlo, ¿conoce el texto de antemano?
nobe4
Sí, sé qué texto quiero poner en cada elemento. Gracias por la sugerencia de plugin. Estaré en casa esta noche y también veré las macros de Vim.
Azmodeus

Respuestas:

9

Para lo que quieres hacer, emmet-vim , como sugiere nobe4, es tu mejor opción.

En el modo de inserción, li{item $}*10<c-y>,se expandirá 10 <li>s con item Nprecargado como texto. Comenzarás a editar el contenido del primero. Mientras todavía está en modo de inserción, al presionar <c-y>nse moverá a la siguiente etiqueta para editar.

Si los elementos de su lista no son una secuencia de texto repetido, puede usar vim-surround para ayudar.

Ejemplo de lista de texto que debe envolverse:

abc
def
ghi

Si comienza con el cursor en algún lugar del texto, al presionar se ^vip$<c-v>Stli<cr>ajustará cada línea <li></li>.

^     - move to the first column
vip   - select the paragraph
$     - Move to the last column in the selection
<c-v> - Convert the visual selection into a block. Without the
        previous $, it would only select 1 column.
St    - Start vim-surround's tag entry
li    - The tag name
<cr>  - Enter

Esto se puede convertir en un mapa de teclas fácil de usar:

nmap <leader>li ^vip$<c-v>Stli<cr>
Tommy A
fuente
1
Me has ahorrado mucha agonía en los dedos. Gracias Señor.
Azmodeus
1
@Azmodeus Me alegra que haya ayudado. vim-surround es un refuerzo de productividad tal que debería tomarse el tiempo para seguirlo junto con sus documentos. Y por si no lo sabía, emmet-vim funcionará en hojas de estilo precompiladas como sass o menos. Por ejemplo, intente esto en un archivo scss:.col$*5>.inner
Tommy A
2

Probablemente haría esto con un mapeo:

 :nmap ^B o<li></li>^[4hi

El plan es insertar en las etiquetas y luego colocar la inserción entre ellas, de modo que pueda escribir el texto, volver al modo normal y luego hacer ctrl-b nuevamente. (PS, los ^ B y ^ [se ingresan usando ctrl_V, pero probablemente ya lo sabías.) Para poner en diez filas en un solo comando, puedes usar

10ctrl_b

No estaba claro si tiene alguna forma automática de crear el texto del elemento.

Tim Ferguson
fuente