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
g
comando 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 delg
comando?
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
g
es5gg
. 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
g
funciona en el modo de comando.fuente
gg
irá a la primera línea, mientrasG
que irá a la última. Además,5G
va 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,52y
81G11Y
es incluso "más corta".mx
antes y'x
despué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í?t
se puede considerar comot
enferma ot
o y.
es la dirección de la línea actual.:copy
Tambié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
G
comando va a un determinado número de línea, si va acompañado de un valor de recuento.81G
te pone en la línea 81.El
y
comando 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"+y91G
81,91y
y de alguna manera apuntar al registro?:81,91y +
:81,91y +
no funciona. Funciona para otros registros como,:81,91y a
por ejemplo, pero no parece que le guste el+
registro. ¿Esto definitivamente funciona para otras personas?g
no hace nada por sí mismo. Es uno de un par de metacomandos que contiene un montón de comandos no relacionados.z
es otro comando como ese.fuente
Vim's
:help index
describeg
como: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 a
que 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
A
registro provoca una operación de adición en el registro ena
lugar 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
ya
en:91,95ya a
ser sinónimo de algún modoya{motion}
en el que el movimiento fue suministrada por91,95
. Esto era incorrecto y la "a" enya
es completamente innecesaria. En mi defensa, myhelp yank
no transmite queya
sea un posible alias deyank
.fuente
:ya
es 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 aliasya
parayank
. Sin embargo, tienes razón,a
no 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
,:ya
y:yan
son implícitamente alias de:yank
:ya
y no el comando normaly
Como 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í:
m
es 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
'a
para 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:
81gg11yy
enfoque 2:
81gg
luegoshift+v
luego91gg
luegoy
fuente