2010-10-18 21 views
29

Me gustaría dividir una línea (en la ubicación del cursor) en dos líneas sin salir del modo normal (ingresando insertar o modo de línea de comandos). es posible?¿Cómo romper una línea en vim en modo normal?

Actualmente llego a la ubicación que quiero y presiono 'i' para ingresar al modo insertar, 'enter' para dividir la línea en dos, luego 'esc' para volver al modo normal.

No estoy tratando de establecer una longitud de línea máxima o hacer una sintaxis o algo así. Solo quiero dividir una línea en dos líneas sin salir del modo normal. 'J' se une a la línea en la que se encuentra el cursor a la línea debajo de ella, que es útil. Quiero lo contrario: dividir una línea en dos con un solo comando.

Respuesta

34

Prueba esto:

:nnoremap <NL> i<CR><ESC> 

continuación, basta con pulsar Ctrl-J cada vez que desee dividir una línea.

+2

Eso es exactamente lo que esperaba. Me parece extraño que este no sea un comando incorporado en vim, pero agregué la línea a mi archivo .vimrc y estoy felizmente trajinando. – Ted

+2

Gracias y aprecio descubrir una característica que nunca supe que necesitaba hasta ahora ... ;-) –

+5

Creo que es mejor usar ': noremap' en lugar de': map', y que es incluso mejor usar ': nnoremap' en este caso, ya que la pregunta indica * modo normal *. – Benoit

20

No conozco ni un solo comando de tecla, pero muchas veces hago "r" y luego "Enter" para romper una línea.

"r" reemplaza el carácter actual debajo del cursor sin pasar al modo de inserción. Esto puede no ser lo que quiera si no desea reemplazar un carácter ...

+0

No funciona para mí ... inserta el carácter '^ M'. Probablemente depende de '& fileformat'. – Benoit

+0

@Benoit, 'fileformat' no hace diferencia durante la edición; solo se usa para leer y escribir. – graywh

2

Hasta donde yo sé, esto no es posible sin ingresar al modo de inserción. Puede sin embargo macro con algo como (reemplace Z con la tecla que desea utilizar)

nmap Z i<cr><esc>k$ 

básicamente esto mapea la tecla 'Z' para entrar en el modo de inserción 'i', insertar un retorno de carro '<cr>', salir del modo de inserción '<esc>', subir una 'k' línea y, finalmente, ir al final de la línea '$'

2

por esta pregunta duplicado: How do I insert a linebreak where the cursor is without entering into insert mode in Vim?

Desde dentro de vim, tipo:

:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter] 

Esto mapea la tecla G para macro I [Enter] [Escape]

+0

Gracias. Hice algunas búsquedas antes de publicarlas, pero supongo que no utilicé los términos correctos. Esa fue una buena discusión a la que se vinculó, y me siento mal por haber publicado un duplicado, pero creo que recibí una respuesta ligeramente más elegante de parte de Amardeep. – Ted

+0

Creo que es mejor usar la notación de teclas de Vim (por ejemplo, y ) para mapas. Además, sea más específico con respecto a los modos de mapa. – graywh

13

cursor puesto en posición y ...

r<Enter> 
+0

No estoy seguro de por qué esta no es la respuesta principal, ya que no requiere asignaciones adicionales. –

+3

Porque reemplaza el carácter en la posición actual con \ n – caio

+0

también porque es posible que desee dividir la línea en un carácter de espacio no blanco, por ejemplo en '(| (arg)' que significa 'arg)' irá en el línea siguiente pero pierde uno de los parens – skamsie

9

Al igual que en otras respuestas, pero no reemplaza el carácter actual. reasigna requiere

R<enter>

n.

+2

Cerrar, pero deja al usuario en modo Insertar, quiere terminar en modo Normal. – Symmitchry

0

Puede usar la grabación. Coloque el cursor donde desee insertar un salto de línea. Tipo qa para empezar a grabar en el registro a (se puede utilizar otro registro que no sea a si lo desea. Luego escribe i (cambia a modo de inserción), Volver (insertar nueva línea), de escape (modo de inserción de salida), q (finaliza la grabación.) Ahora puede invocar esta secuencia de teclas escribiendo @a (donde a es el número de registro que usó cuando comenzó la grabación, así que siga moviendo el cursor donde desea insertar una nueva línea y escriba @a.

Cuestiones relacionadas