Soy un desarrollador de C # que recientemente decidió expandir 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 a las que parece que no puedo encontrar la respuesta:
Digamos que quería tirar de 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?Estoy un poco confundido acerca del
gcomando 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 un comando de movimiento o una especie de "captura todo" para otros comandos ejecutados en modo normal. ¿Alguien puede explicarme esto o señalarme una referencia que dé una buena explicación delgcomando?

Respuestas:
Líneas de Yank 81-91
Si a tus dedos no les gusta encontrar las teclas
:y,, esto también funcionaría (ve a la línea 81, tira 11 líneas)Mi único uso de
ges5gg. Para ir a la quinta línea.22gg: 22ª línea. Como dijo jimbo, en realidad es solo un modificador para algunos otros comandos.Para completar, ( http://vim.wikia.com/wiki/Power_of_g ) explica mucho cómo
gfunciona en el modo de comando.fuente
ggirá a la primera línea, mientrasGque irá a la última. Además,5Gva a la línea 5. Las marcas pueden ser utilizados en lugar de los números de línea también (bueno para las macros), es decir::'a,52y81G11Yes incluso "más corta".mxantes y'xdespués, pero luego la versión del modo comando se vuelve mucho más sucinta. Humm ... apenas escribí esto, vi la respuesta de @Asta.También puede copiar las líneas actuales a la ubicación actual del cursor usando 't'.
Esto pegará las líneas 81-91 debajo de la línea en la que se encuentra el cursor.
Aprendí esto de http://vimcasts.org, que es un excelente recurso sobre VIM.
fuente
t.significa aquí?tse puede considerar comotenferma oto y.es la dirección de la línea actual.:copyTambién me gusta usar la opción de número de línea relativo de vim, lo que significa que puedo ingresar:
para arrastrar el texto al búfer con nombre a.
NB Especificar A agregará lo que está tirando al contenido actual del búfer a.
No olvide que también puede copiar bloques de texto y mover bloques de texto con los comandos similares:
significa copiar las cuatro líneas de texto 10 líneas arriba hacia abajo de la línea actual, y
significa mover las cuatro líneas de texto 10 líneas arriba hacia abajo de la línea actual.
fuente
El
Gcomando va a un determinado número de línea, si va acompañado de un valor de recuento.81Gte pone en la línea 81.El
ycomando se puede combinar con un movimiento, comoG. Entonces, para tirar todo hasta la línea 91, puede usary91G.Juntos obtienes:
Vaya a la línea 81, luego jale mientras va a la línea 91.
fuente
81G"+y91G81,91yy de alguna manera apuntar al registro?:81,91y +:81,91y +no funciona. Funciona para otros registros como,:81,91y apor ejemplo, pero no parece que le guste el+registro. ¿Esto definitivamente funciona para otras personas?gno hace nada por sí mismo. Es uno de un par de metacomandos que contiene un montón de comandos no relacionados.zes otro comando como ese.fuente
Vim's
:help indexdescribegcomo:Desplácese hacia abajo (o
:help g) para ver una lista.fuente
La mejor solución sería ingresar al "modo visual", presionando v. Y después de seleccionar las líneas, simplemente cópielas presionando y. Luego pegue las líneas copiadas presionando p.
fuente
Además de
:91,96y aque yanks (y) las líneas 91 a 96 en el registroa, (pegadas con"ap), las líneas yanked se pueden agregar al registro con:Es decir, la capitalización del
Aregistro provoca una operación de adición en el registro enalugar de una sobrescritura. La capitalización del registro siempre funciona así, por ejemplo, se:let @A=';'agrega un;al registroa.El uso de más (+) o menos (-) hace referencia a líneas relativas a la posición actual del cursor:
Es decir, tiraría (
y) 21 líneas alrededor de la posición actual del cursor y las pondría en registrob.Una ausencia de entrada en realidad también representa la posición actual del cursor, lo que significa que esto:
arrastraría el texto de 5 líneas arriba a la posición actual del cursor en el búfer con nombre
a, y:arrastraría las 5 líneas después de la posición actual del cursor al búfer
a.Nota: Si tiene una macro en el búfer
a, el yank anterior la sobrescribió, ya que los registros de yank y los registros de macro son realmente lo mismo. Por eso, casualmente, puede pegar una macro, editarla y luego volver a colocarla en su registro. Personalmente, utilizo las letras alcanzadas por mi mano izquierda para los tirones y las letras alcanzadas por la derecha para las macros.Mover bloques de texto, se ve así:
lo que significa mover las cuatro líneas colocadas 10 líneas por delante del cursor actual, por debajo de la línea actual.
Apéndice
Me previamente confundido
yaen:91,95ya aser sinónimo de algún modoya{motion}en el que el movimiento fue suministrada por91,95. Esto era incorrecto y la "a" enyaes completamente innecesaria. En mi defensa, myhelp yankno transmite queyasea un posible alias deyank.fuente
:yaes una abreviatura de:yank, así que no estoy seguro de cómo me siento acerca de tirar todas las líneas . Pero buen trabajo al condensar parte de la información dispersa:help yank. No hay aliasyaparayank. Sin embargo, tienes razón,ano significa "todos", técnicamente significa "a". Sin embargo, prefiero decir "todos", ya que tiene más sentido para mí.:[range]y[ank] [x] Yank [range] lines [into register x]los corchetes eny[ank]indican que[ank]son opcionales.:y,:yay:yanson implícitamente alias de:yank:yay no el comando normalyComo usuario de Vi / Vim desde hace mucho tiempo, tiendo a usar 'marcas' en lugar de números de línea (o 'marcadores de línea'). Funciona así:
mes el carácter de 'marca'; luego use cualquier letra para identificar / nombrar la marca. Para volver a una marca, el prefacio de la marca nombrada con una comilla simple ('a) Estas marcas se pueden utilizar como rango. Ejemplos:Cuando esté en modo comando, mueva el cursor a la línea 2, escriba
ma. desplácese a la línea 4, escribamb. Para tirar de la marca a a la marca b escriba:Para eliminar de la marca a a la marca b, escriba:
Para buscar desde la marca a hasta la marca by reemplazar 'ine' por 'tinta':
Para copiar la marca a hasta la marca by pegar debajo de la posición actual (el 'punto' siempre hace referencia a la línea donde está posicionado el cursor):
Cambie las líneas de código, entre la marca a y la marca b , una pestaña hacia la derecha (use el cheurón opuesto
<, para moverse a la izquierda):En el modo de comando, puede regresar a las marcas simplemente escribiendo
'apara regresar a la línea marcadaa. Mecanografía''lo lleva de regreso a la posición anterior (desafortunadamente solo recuerda la posición anterior, no dos hacia atrás).Puede acceder a búferes con nombre, copiar, eliminar líneas, buscar y reemplazar solo partes de su código, etc.sin necesidad de conocer los números de línea.
fuente
Para arrancar líneas de la línea 81 a la 91:
enfoque 1:
81gg11yyenfoque 2:
81ggluegoshift+vluego91ggluegoyfuente