¿Cómo puedo generar una lista de números secuenciales, uno por línea?

38

A partir de una pizarra en blanco, ¿cómo puedo obtener un documento que contiene

1
2
3
4
5
6
7
8
9
10
…
100

Para ser claros, no quiero que estos números se muestren en el margen; Quiero que se inserten en el documento mismo.

200_success
fuente

Respuestas:

51

Uso :puty range():

:put =range(1,100)

Para evitar la línea en blanco en la parte superior ( felicitaciones a romainl ), use :0put:

:0put =range(1,100)
Deshacer
fuente
1
O en modo de inserción con <C-r>=range(1,100).
Hotschke
18

Además de Undo's pure-vim :put =range(1,100)(que en realidad te deja con una línea en blanco arriba), puedes, dependiendo de tu sistema operativo, usar uno de sus comandos. Por ejemplo, en una caja de Unix / Linux:

%!seq 1 100

Lo anterior funciona canalizando todo el búfer (vacío) a seq, que ignora su entrada y solo emite los números del 1 al 100. Vim luego reemplaza todo el búfer con seqla salida de.

Eso es útil cuando ya está familiarizado con alguna forma de línea de comandos para obtener lo que desea.

derobert
fuente
Esto "pregunta" la pregunta que es por qué creo que es mejor que la aceptada. Sí, puedes hacer que vim haga el trabajo, así como puedes usar una llave inglesa para remover la sopa. Vim es un editor de texto, no un generador de texto arbitrario; hay herramientas mucho más obvias para eso.
msw
16

Para el registro, y definitivamente no es el camino más corto (ver la increíble solución de @ Deshacer), pero la secuencia de teclas también lo hará:

i1EscqaYpCtrl+aq98@a

Déjame desglosar eso para ti:

  1. i1<Esc> - inserte el número 1, luego vuelva al modo de comando
  2. qa - comenzar a grabar una macro en el registro "a"
  3. Y - copiar la línea actual
  4. p - pegue la línea actual (el cursor también se moverá a la línea pegada)
  5. <Ctrl>a - incremente el siguiente número en la línea, haciéndolo 2
  6. q - dejar de grabar la macro (se registró "a")
  7. 98@a - reproducir la macro en el registro "a" 98 veces
Detener el daño continuo a Mónica
fuente
5

Aquí hay un enfoque diferente, que necesita un Vim más nuevo (algo así como 7.4.800)

Esto supone un búfer vacío y '1' en el registro a. Primero introduzca 100 1 en su memoria intermedia, "a100P.

Luego, seleccione visualmente las líneas 2 hasta 100 :2EnterVG.

Ahora presiona gCtrl+ A.

Lee la ayuda en :h v_g_CTRL-A

Christian Brabandt
fuente
Debe agregar let @ a = "1" en su respuesta. Los principiantes pueden quedarse atrapados para encontrar cómo almacenar el valor 1 en el registro a.
SibiCoder
He visto el combo gCtrl + A en otras soluciones similares. Sin embargo, no he podido encontrar una explicación de lo que está haciendo / cómo funciona. ¿Tiene una referencia en la documentación que explica qué hace g? ¡Gracias! Si encuentro una explicación, la publicaré.
codingFoo
1
la documentación está en:h g_CTRL-A
Christian Brabandt
Me había perdido el enlace a la sección v_g_CTRL-A.
codingFoo
2

Sé que esta pregunta es muy antigua, pero también hay otra forma de hacerlo. Prueba esto:

99o<esc>:%s/^/\=line('.')<cr>

99o<esc>solo abrirá 100 líneas en blanco. Luego, ejecutamos un comando sustituto:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
DJMcMayhem
fuente