por - ¿Cómo inserto un salto de línea donde está el cursor sin ingresar al modo insertar en Vim?
salir de vi linux (13)
A continuación, se indica cómo crear una macro que inserte una nueva línea en el cursor cada vez que presiona ''g'' mientras no esté en el modo de inserción:
Desde dentro de vim, escriba:
:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]
Dónde:
- [Ctrl + V] significa mantener presionada la tecla Ctrl y presionar ''v''
- [Enter] significa presionar la tecla Enter
- [Esc] significa presionar la tecla Esc
Verá lo siguiente en la parte inferior de su ventana de vim hasta que presione la tecla Enter final:
:map g i^M^[
Explicación:
[Ctrl + V] significa "citar el siguiente carácter": le permite insertar la línea nueva y los caracteres de escape en el comando.
Así que estás asignando la clave ''g'' a la secuencia:
i [Enter] [Escape]
Esto es útil para insertar una nueva línea antes del cursor, luego salir del modo de inserción .
Ajustes:
- Puede reemplazar la ''g'' por cualquier carácter que no esté vinculado a un comando que use.
- Agregue más al comando, por ej.
f}i^M^[O
- Esto mostrará el } e inserte otra nueva línea, luego escape del modo de inserción y O escriba una línea vacía para que ingrese más código. - Puede agregar el comando a su archivo .vimrc o .exrc para hacerlo permanente. Simplemente omita los dos puntos desde el principio, por lo que el comando comienza con "mapa"
¡Disfrutar!
¿Es posible insertar un salto de línea donde el cursor está en Vim sin entrar en modo insertar? Aquí hay un ejemplo ( [x]
significa que el cursor está en x
):
if (some_condition) {[ ]return; }
Ocasionalmente, es posible que desee ingresar más código. Así que presionaría i para entrar en el modo de inserción, presionar Enter para insertar el salto de línea y luego eliminar el espacio adicional. Luego, entraría al modo normal y posicionaría el cursor antes del corsé de cierre y luego haría lo mismo para colocarlo en su propia línea.
He estado haciendo esto un tiempo, pero seguramente hay una mejor manera de hacerlo.
Asumiendo que está bien con el mapeo de K
a otra cosa (elija una tecla diferente de su agrado), y usando el marcador ''
como marcador temporal está bien, ¿por qué no hacer esto?
:nmap K m''a<CR><Esc>`''
ahora presionando K en modo normal sobre el carácter después del cual desea que ocurra el salto de línea dividirá la línea y dejará el cursor donde estaba.
Básicamente, cuando divide una línea, o bien 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 o el otro? Aquí está mi mapeo para K:
"Have K split lines the way J joins lines
nnoremap <expr>K getline(''.'')[col(''.'')-1]=='' '' ? "r<CR>" : "i<CR><Esc>"
Uso el operador ternario para condensar las dos acciones en un mapa clave. Rompiéndolo, <expr>
significa que la salida del mapa clave puede ser dinámica y en este caso depende de la condición getline(''.'')[col(''.'')-1]=='' ''
que es la manera larga de preguntar vim si el personaje debajo del cursor es un espacio. Finalmente, ¿el operador ternario familiar ? :
? :
cualquiera reemplaza el espacio con linebreak ( r<CR>
) o inserta uno nuevo ( i<CR><Esc>
)
Ahora tienes un encantador mapa de clave hermana para el comando J
De hecho, necesita las siguientes operaciones combinadas:
- Presione v para ingresar al modo visual
- Seleccione la línea que desea dividir
- Presione
:
para ingresar al modo de comando -
s//s//r/g
- Hecho
En Vrapper puede usar gql, que dividirá una línea sin ingresar al modo insertar, pero puede que no siempre mantenga la sangría.
En mi humilde opinión, el mapeo gs
incorporado no es una asignación útil (pon a vim a dormir), se podría usar esto para dividir:
nmap gs i<CR><ESC>
Establezca esta asignación de teclas en su vimrc
:map <C-m> i<CR><Esc>h
Luego presione Ctrl + m si desea usarlo en su vim.
Este mapeo romperá cualquier función de una línea que tenga. Simplemente coloque el cursor sobre la línea y presione ''g'' en el modo normal:
:map g ^f{malr<CR>`a%hr<CR>`a
Esto supone que tienes un espacio después del corsé de apertura y un espacio antes del corsé de cierre. Vea si eso funciona para usted.
Para el ejemplo que has dado, puedes usar r Enter para reemplazar un solo caracter (el espacio) con Enter. Entonces, f espacio . para avanzar al próximo espacio y repetir el último comando.
Dependiendo de su configuración de autoinicio, lo anterior puede o no sangrar la declaración de devolución correctamente. De lo contrario, use s Ingrese la pestaña Esc en su lugar para reemplazar el espacio con una nueva línea, sangría la línea y salga del modo de inserción. Tendría que reemplazar el segundo espacio con un comando diferente para que no pueda usar ''.'' en este caso.
Si generalmente está expandiendo un bloque de una línea a tres líneas, intente con la sustitución. Cambie el soporte de apertura en soporte / retorno, y el soporte de cierre en retorno / soporte.
El comando para sustituir el paréntesis / retorno para el paréntesis se ve así:
:s/{/{/r/
Como desea utilizar esto a menudo, puede asignar la secuencia completa a una pulsación de tecla no utilizada como esta:
:map <F7> :s/{/{/r/ ^M :s/}//r}/ ^M
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.
Comprobar :help map-which-keys
para obtener consejos sobre cómo seleccionar las combinaciones de teclas no utilizadas en el mapa.
Si tiene la entrada:
aaa bbb ccc ddd
y quiere dar salida
aaa
bbb
ccc
ddd
Puedes usar el comando
f r<ENTER>;.;.
Un mapeo simple para romper la línea en el cursor presionando Ctrl + Enter:
:nmap <c-cr> i<cr><Esc>
esencialmente ingresa al modo ''insertar'', inserta un salto de línea y vuelve al modo normal.
póngalo en su archivo .vimrc para uso futuro.
Vim matará automáticamente cualquier espacio en blanco a la derecha del cursor si autoindent
una línea en dos mientras está autoindent
(o cualquier otra ayuda de indentación).
Si no desea utilizar ninguna de esas configuraciones, use s
lugar de i
para sustituir su nuevo texto por el espacio en blanco en lugar de simplemente insertarlo. (Si hay varios espacios en blanco, coloque el cursor en el extremo izquierdo y use cw
lugar).