Empecé a usar gvim, y no puedo entender cómo funciona la edición multilínea en gvim.
Por ejemplo:
Texto original:
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Ctrl + q, jjjjjj, $ todo está seleccionado, luego presiono I para hacer una inserción multilínea.
Mi intención es insertar comillas como en la primera línea, y luego presionar Esc:
asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
¿Que pasó? Esperaba un comportamiento similar al de sublimetext:
Si no sabe cómo funciona, simplemente repite las acciones para cada línea. ¿Cómo puede lograr eso? ¿Y qué está haciendo vim aquí?
vim
sublimetext
text-editor
AlfredoVR
fuente
fuente
Respuestas:
Hazte un favor dejando caer la capa de compatibilidad de Windows.
El acceso directo normal para ingresar al modo Visual-Block es
<C-v>
.Otros se han ocupado de grabar macros, aquí hay algunas otras ideas:
Usando solo el modo de bloqueo visual .
Coloca el cursor en la segunda palabra:
Presione
<C-v>
para ingresar al modo de bloqueo visual y expanda su selección hacia la parte inferior:Golpe
I"<Esc>
para obtener:Coloque el cursor sobre el último carácter de la tercera palabra:
Presione
<C-v>
para ingresar al modo de bloqueo visual y expanda su selección hacia la parte inferior:Golpe
A"<Esc>
para obtener:Con modo de bloqueo visual y Surround.vim .
Coloca el cursor en la segunda palabra:
Presione
<C-v>
para ingresar al modo de bloqueo visual y expanda su selección hacia la parte inferior y hacia la derecha:Presione
S"
para rodear su selección con ":Con modo de línea visual y
:normal
.Presiona
V
para seleccionar toda la línea y expandirla hacia la parte inferior:Ejecute este comando:
:'<,'>norm ^wi"<C-v><Esc>eea"<CR>
para obtener::norm[al]
le permite ejecutar comandos de modo normal en un rango de líneas (la'<,'>
parte se agrega automáticamente por Vim y significa "actuar en el área seleccionada")^
coloca el cursor en el primer carácter de la líneaw
pasa a la siguiente palabrai"
inserta un"
antes del cursor<C-v><Esc>
es la forma en que Vim ingresa un carácter de control en este contexto, aquí se<Esc>
usa para salir del modo de inserciónee
se mueve al final de la siguiente palabraa"
agrega un"
después del cursor<CR>
ejecuta el comandoUsando Surround.vim, el comando anterior se convierte en
fuente
gv
para recuperar su selección visual anterior y luego moverla horizontalmente, tal vez con2e
. (gv
¡s
en modo normal pero uno grandeS
en modo visual, por lo que en el paso 3 del método surround.vim, las pulsaciones de teclas deberían serS"
S"
, nos"
.
.Esas son algunas de las soluciones listas para usar dadas anteriormente, pero también podemos probar algunos complementos que proporcionan múltiples cursores como Sublime.
Creo que este parece prometedor:
Parecía abandonado por un tiempo, pero ha tenido algunas contribuciones en 2014.
Es bastante poderoso, aunque me tomó un tiempo acostumbrarme al flujo (que es bastante sublime pero todavía modal como Vim).
En mi experiencia, si tiene muchos otros complementos instalados, ¡puede encontrar algunos conflictos!
Hay otros intentos de esta característica:
Siéntase libre de editar si nota alguna de estas mejoras en proceso.
fuente
Hay varias formas de lograr eso en Vim. Sin embargo, no sé cuáles son más similares a Sublime Text.
El primero sería a través del modo de inserción multilínea . Coloque el cursor en la segunda "a" en la primera línea, presione
Ctrl-V
, seleccione todas las líneas, luego presioneI
y escriba una comilla doble. Al presionar<esc>
se repetirá la operación en cada línea.El segundo es a través de macros. Coloque el cursor en el primer carácter y comience a grabar una macro con
qa
. Vaya a la derecha conllll
, ingrese al modo de inserción cona
, ponga una comilla doble, salga del modo de inserción y regrese al comienzo de su fila con<home>
(o equivalente). Presionej
para moverse una fila hacia abajo. Deja de grabar conq
. Y luego reproduce la macro con@a
. Varias veces.¿Alguno de los enfoques anteriores funciona para usted?
fuente
si usa el comando "global", puede repetir lo que puede hacer en una línea en cualquier número de líneas.
ejemplo:
El comando anterior encuentra todas las líneas que tienen foo y reemplaza todas las apariciones de barra en esa línea con baz.
hará en cada línea
fuente
:g
comando descrito aquí. Me gusta usar/gc
para pedir "confirmaciones" para poder presionary
on
para cada reemplazo, oa
para cambiarlos todos.fuente
I
no puede ingresar al modo de inserción, ¿sabe por qué sucede esto?vim -u NONE
e intente realizar la acción deseada nuevamente, podría ser algún mapa o complemento que cambie el comportamiento de su vim.No estoy seguro de lo que
vim
está haciendo, pero es un efecto interesante. La forma en que estás describiendo lo que quieres suena más a cómo funcionan las macros (:help macro
). Algo como esto haría lo que quieras con las macros (comenzando en modo normal):qa
: Grabar macro paraa
registrar.0w
:0
ir al inicio de la línea,w
saltar una palabra.i"<Esc>
: Ingrese al modo de inserción, inserte ay"
regrese al modo normal.2e
: Salta al final de la segunda palabra.a"<Esc>
: Añadir a"
.jq
Ir a la siguiente línea y finalizar la grabación de macro.Tomados en conjunto:
qa0wi"<Esc>2ea"<Esc>
Ahora puede ejecutar la macro con
@a
, repita la última macro con@@
. Para aplicar al resto del archivo, haga algo como lo99@a
que se supone que no tiene más de 99 líneas, la ejecución de la macro finalizará cuando llegue al final del archivo.Aquí le mostramos cómo lograr lo que desea
visual-block-mode
(comenzando en modo normal):visual-block-mode
, seleccione las líneas que desea afectar,G
para ir al final del archivo.I"<Esc>
."
..
sea suficiente.fuente
9999@a
puede ser feo, pero es mucho más fácil escribir:%norm! @a
y no se vuelve a ejecutar en la línea que acaba de editar. Todavía es bueno saberlo de todos modos. :)Mi solución es usar estas 2 asignaciones:
Cómo usarlos:
V12j
<leader>n
<leader>m
Para realizar otra edición, no necesita hacer la selección nuevamente. Simplemente presione
<leader>n
, haga su edición y presione<leader>m
para aplicar.Cómo funciona esto:
<Esc><Esc>0qq
Salga de la selección visual, vaya al comienzo de la línea y comience a grabar una macro.q
Deja de grabar la macro.:'<,'>-1normal!@q<CR>
Desde el comienzo de la selección visual hasta la línea antes del final, reproduzca la macro en cada línea.<Down>
Regresa a la última línea.También puede asignar la misma clave pero para diferentes modos:
Aunque esto arruina tu habilidad para hacer otra edición. Tendrá que volver a seleccionar sus líneas.
fuente