2010-01-07 14 views
59

Soy un desarrollador de C# que recientemente ha decidido ampliar mi conocimiento de las herramientas disponibles para mí. La primera herramienta que he decidido aprender es Vi/Vim. Todo ha ido bien hasta ahora, pero hay un par de preguntas que me parece que no puede encontrar la respuesta a:Vim tirar rango de líneas

  1. digamos que quería dar un tirón a una serie de líneas. Sé que hay muchas formas de hacerlo, pero me gustaría hacerlo por número de línea. Pensé que sería similar a cómo funcionan los comandos sustitutos, algo así como 81,91y. ¿Hay alguna forma de hacer esto?

  2. Estoy un poco confundido con el comando g en modo normal. Parece hacer una gran cantidad de cosas y realmente no puedo determinar qué hace el comando g en su núcleo. Estoy confundido sobre si es o no un comando de movimiento o un tipo de "capturar todo" para otros comandos que se ejecutan en el modo normal. ¿Puede alguien explicar esto o dirigirme a una referencia que da una buena explicación del comando g?

+1

¿Sabe usted acerca de la orden ": ayuda" en vim (1)? –

+0

Sí, pero no pude encontrarlo en todas las referencias. Resulta que estaba pensando que lo haría desde el modo normal, pero hometoast mostró cómo tenía que hacerse desde el modo de comando. Para el comando g, solo encuentro que la ayuda no une todo como lo esperaría de los otros comandos. – jnadro52

+3

Como un aparte, es posible que desee hacer una publicación por pregunta. – Dana

Respuesta

96

líneas Yank 81-91

:81,91y<enter> 

Si los dedos no les gusta para encontrar las llaves y :,, esto funciona tan bien (pase a la línea 81, un tirón a 11 líneas)

81gg11yy 

Mi único uso de g es 5gg. Para ir a la 5ª línea. 22gg: línea 22a. Como dijo jimbo, en realidad solo es un modificador para algunos otros comandos.

Para completar, (http://vim.wikia.com/wiki/Power_of_g) explica mucho cómo funciona g en modo comando.

+0

¡Guau, eso fue rápido! No intenté hacerlo desde el modo comando, ¡duh! Muchas gracias por la respuesta rápida. – jnadro52

+2

El uso de letras mayúsculas también proporciona variaciones: 'gg' irá a la primera línea, mientras que' G' irá a la última. Además, '5G' va a la línea 5. Las marcas se pueden usar en lugar de los números de línea también (bueno para macros), es decir:': 'a, 52y' – NVRAM

+5

también puedes hacer: 5 en modo comando para ir a la línea cinco , etc. – rmeador

4

g no hace nada por sí mismo. Es uno de los dos metacomandos que contiene un grupo de comandos no relacionados.

z es otro comando como ese.

+0

Gracias. Ahora entiendo que solo se usa para diferentes propósitos. Cuando trato de aprender estas herramientas, intento asociar los comandos con algo que puedo resumir para recordar cómo usarlo correctamente. Parece que el comando g es solo una de esas cosas que necesitas memorizar para usarlo correctamente. – jnadro52

2

de :help index Vim describe g como:

|g|    g{char}   extended commands, see |g| below 

de desplazamiento hacia abajo (o :help g) para obtener una lista.

+1

Estaba familiarizado con: la ayuda pero NO estaba familiarizado con: ayuda (comando). Eso será muy útil en el futuro. Gracias amablemente, señor. – jnadro52

6

también me gusta usar la opción de línea número relativo de vim lo que significa que sólo pueden introducir:

:-10,-7ya a 

dar un tirón el texto en un buffer con nombre.

N.B. Al especificar A se agregará lo que está tirando al contenido actual del búfer a.

No se olvide también se puede copiar bloques de texto y mover bloques de texto alrededor, así como con los comandos similares:

:-10,-7co . 

significa copiar las cuatro líneas de texto de 10 líneas de arriba hacia abajo de la línea actual y

:-10,-7mo . 

significa mover las cuatro líneas de texto 10 líneas arriba a debajo de la línea actual.

11

También puede copiar las líneas actuales a su ubicación actual del cursor con 't'.

:81,91t.<enter> 

Esto pegará las líneas 81-91 debajo de la línea donde está el cursor.

Lo aprendí de http://vimcasts.org que es un recurso excelente en VIM.

5

El comando G va a un cierto número de línea, si va acompañado de un valor de conteo. 81G lo pone en la línea 81.

El comando y se puede combinar con un movimiento, como G. Entonces, para tirar todo hasta la línea 91, puede usar y91G.

Juntos se obtiene:

81Gy91G 

pase a la línea 81, a continuación, dar un tirón, mientras que ir a la línea 91.

+1

Estoy deseando poder votar esto más de una vez. Algo que me ayudó fue usar esto para tirar de un registro (en mi caso, registrar + es decir, el portapapeles): '' '81G" + y91G''' – mgarey

Cuestiones relacionadas