Necesito (visual) seleccionar un rango de líneas desde la línea de comando.
Por ejemplo, el siguiente comando :?^\s*for?+,/^\s*end/- p
imprime todas las líneas contenidas entre una for
y end
(de forma exclusiva). En lugar de realizar la operación de impresión, me gustaría cambiar al modo visual con esas líneas resaltadas. Busqué en el manual pero no pude encontrar un comando como ese.
command-line
visual-mode
nicmus
fuente
fuente
Respuestas:
Los límites de una selección de modo visual están definidos por las marcas
<
y>
.Por lo tanto, el siguiente comando ingresará al modo visual con las líneas 5 a 10 (inclusive) seleccionadas:
:5mark <
establece el inicio de la selección en la línea 5,:10mark >
establece el final de la selección en la línea 10,gv
entra en modo visual con el área definida arriba seleccionada,V
realiza la selección en línea.Puede pasar cualquier rango de Vim al
:mark
comando: lo siguiente ingresará al modo visual usando las expresiones regularesfoo
ybar
para definir los límites del área de selección:El siguiente comando es una versión más simple de lo anterior, pero depende de la posición del cursor:
Para más explicaciones, ver:
:help mark-motions
:help :mark
:help ranges
:help gv
:help v_V
:help :execute
:help search()
help expr-.
fuente
?^\s*for?+ mark < | /^\s*end/- mark > | norm gv
+
y-
en @ nicmus está ajustando los rangos para que la selección no incluya las líneas que coinciden con las expresiones regulares. (Ver:help range
).
operador de concatenación realmente me rechazó, así que aquí hay un ejemplo si alguien siente lo mismo::execute "l" . "s"
producirá la misma salida que:ls
.