¿Es posible insertar un salto de línea donde el cursor está en Vim sin ingresar al modo de inserción? Aquí hay un ejemplo ( [x]
significa que el cursor está encendido x
):
if (some_condition) {[ ]return; }
De vez en cuando, es posible que desee ingresar más código. Entonces presionaría ipara entrar en el modo de inserción, presionaría Enterpara insertar el salto de línea y luego eliminar el espacio extra. A continuación, entraría en modo normal y colocaría el cursor antes de la llave de cierre y luego haría lo mismo para ponerlo en su propia línea.
He estado haciendo esto por un tiempo, pero seguramente hay una mejor manera de hacerlo.
vim
performance
text-editor
Mark A. Nicolosi
fuente
fuente
Respuestas:
Para el ejemplo que ha dado, podría usar rEnterpara reemplazar un solo carácter (el espacio) con Enter. Luego, fspace.para avanzar al siguiente espacio y repetir el último comando.
Dependiendo de su configuración de sangría automática, lo anterior puede o no sangrar correctamente la declaración de devolución. De lo contrario, utilice sEnterTabEscen su lugar para reemplazar el espacio con una nueva línea, sangrar la línea y salir del modo de inserción. Tendría que reemplazar el segundo espacio con un comando diferente para no poder usar '.' en este caso.
fuente
>>
y<<
para ayudar a sangrar si no desea pasar al modo de inserción cons
.A continuación, se explica cómo crear una macro que inserte una nueva línea en el cursor cada vez que presione 'g' mientras no está en el modo de inserción:
Desde dentro de vim, escriba:
Dónde:
Verá lo siguiente en la parte inferior de la ventana de vim hasta que presione la tecla Enter final:
Explicación:
[Ctrl + V] significa "citar el siguiente carácter"; le permite incrustar la nueva línea y los caracteres de escape en el comando.
Entonces estás mapeando la tecla 'g' a la secuencia:
Esto es vim para insertar una nueva línea antes del cursor, luego salir del modo de inserción .
Ajustes:
f}i^M^[O
- Esto f ind el } y i nsert otra nueva línea, a continuación, salir del modo de inserción y O lápiz una línea vacía para que ingrese más código.¡Disfrutar!
fuente
Un mapeo simple para romper la línea en el cursor presionando Ctrl + Enter:
esencialmente ingresa al modo 'insertar', inserta un salto de línea y vuelve al modo normal.
colóquelo en su archivo .vimrc para uso futuro.
fuente
Si normalmente expande un bloque de una línea a tres líneas, pruebe con la sustitución. Cambie el soporte de apertura por soporte / retorno y el soporte de cierre por soporte / retorno.
El comando para sustituir corchete / retorno por corchete se ve así:
Como desea usar esto con frecuencia, puede asignar la secuencia completa a una pulsación de tecla no utilizada como esta:
Donde vea ^ M en la secuencia, escriba [Ctrl-V] , luego presione enter .
Ahora, con el cursor en cualquier lugar de la línea de muestra, presione la tecla asignada y se agregarán los retornos de carro.
Consulte los
:help map-which-keys
consejos sobre cómo seleccionar las pulsaciones de teclas no utilizadas para asignar.fuente
g
no está mapeado porque se usa como clave de 'espacio de nombres' para muchas asignaciones de vim que constan de dos pulsaciones de teclas (ver:h g
). Entonces, este mapeo es en realidad un no-go.g
ya está en uso como clave de 'espacio de nombres'?:help g
es una forma de ver una lista deg
asignaciones predeterminadas + algo.z
,[
]
son otras claves de 'espacio de nombres', ver p:help index
. ej . Puede invocar:verbose map g
para ver todas las asignaciones definidas actuales que comienzan con g. Los recursos web útiles son viemu.com/vi-vim-cheat-sheet.gif , vimcasts.org/blog/2014/02/follow-my-leader , vimeo.com/85343734 (diapositivas: speakerdeck.com/nelstrom/follow-my -líder )Suponiendo que está de acuerdo con mapear
K
a otra cosa (elija una clave diferente de su agrado), y usar un marcador'
como marcador temporal está bien, ¿por qué no hacer esto?ahora presionando K en modo normal sobre el carácter después del cual desea que ocurra el salto de línea, se dividirá la línea y dejará el cursor donde estaba.
fuente
Vim eliminará automáticamente cualquier espacio en blanco a la derecha del cursor si divide una línea en dos mientras
autoindent
(o cualquier otra ayuda de sangría) está habilitado.Si no desea utilizar cualquiera de estos ajustes, utilice
s
en lugar dei
con el fin de s ubstitute su nuevo texto para el espacio en blanco en lugar de sólo la inserción. (Si hay varios espacios en blanco, coloque el cursor en el extremo izquierdo y utilicecw
en su lugar).fuente
Básicamente, cuando divide una línea, simplemente desea insertar un retorno de carro, o en el caso de que esté en un espacio, reemplácelo con un retorno de carro. Bueno, ¿por qué conformarse con uno u otro? Aquí está mi mapeo para K:
Utilizo el operador ternario para condensar las dos acciones en un mapa de teclas. Desglosarlo
<expr>
significa que la salida del mapa de teclas puede ser dinámica y, en este caso, depende de la condición,getline('.')[col('.')-1]==' '
que es la forma larga de preguntar a vim si el carácter debajo del cursor es un espacio. Finalmente, el operador ternario familiar? :
reemplaza el espacio con linebreak (r<CR>
) o inserta uno nuevo (i<CR><Esc>
)Ahora tienes un hermoso mapa de teclas hermanas para el
J
comando.fuente
Configure esta asignación de teclas en su vimrc
Luego presione Ctrl + m si desea usarlo en su vim.
fuente
En mi humilde opinión, el mapeo incorporado
gs
no es un mapeo útil (poner vim en reposo), uno podría usar esto para dividir:fuente
En Vrapper , puede usar gql, que dividirá una línea sin ingresar al modo de inserción, pero es posible que no siempre mantenga la sangría.
fuente
De hecho, necesita las siguientes operaciones combinadas:
:
para ingresar al modo de comandos/\s/\r/g
fuente
Si tiene la entrada:
y quiero dar salida
Puedes usar el comando
fuente
Descubrí que esta es la implementación más fiel de lo que esperaría que hiciera el comportamiento opuesto
J
Hace la nueva línea simplista en el cursor, se ocupa de cualquier espacio en blanco final en la línea anterior si hay alguno presente y luego devuelve el cursor a la posición correcta.
i <cr> <esc> - esta es una de las soluciones más comunes sugeridas, no elimina los caracteres que no son espacios en blanco debajo del cursor, pero también lo deja con espacios en blanco finales
^mw - Ir al inicio de una nueva línea y crear una marca debajo
w
gk - sube una línea
:silent! s/\v +$//<cr> - regex reemplaza cualquier espacio en blanco al final de la línea
:noh<cr> - Borre cualquier búsqueda resaltando que la expresión regular podría haberse activado
`w - devolver la marca debajo
w
Básicamente combina lo mejor de ambos r<esc><cr>yi<cr><esc>
Nota: Tengo este vínculo al Sque potencialmente sobrescribe una clave útil, pero es un sinónimo de ccy, dado que no lo uso con tanta frecuencia como las divisiones, estoy de acuerdo con sobrescribirlo.
fuente
o
ESC
El comando lo hará por ti.fuente
Este mapeo romperá cualquier función unifilar que tenga. Simplemente coloque el cursor en la línea y presione 'g' en modo normal:
Esto supone que tiene un espacio después de la riostra de apertura y un espacio antes de la riostra de cierre. Vea si eso funciona para usted.
fuente