¿Cómo me muevo al final de la línea en Vim?

1194

Sé cómo moverme generalmente en modo comando, específicamente, saltar a líneas, etc. Pero, ¿cuál es el comando para saltar al final de la línea en la que estoy actualmente?

corredor de sal
fuente
19
Comandos básicos de vim cubiertos en menos de 10 minutos youtube.com/watch?v=71YTkxUNwmg
eomeroff
14
¿Qué hay de malo en pasar unos minutos corriendo a través de vimtutor? Ya es parte de su instalación de Vim y le muestra los conceptos básicos.
dash-tom-bang
@ dash-tom-bang Bueno, obtuvieron una puntuación bastante alta aquí ... :) Pero sí, tienes razón, vimtutores genial. ¿Probablemente no lo sabían?
Pryftan

Respuestas:

2054

Solo la tecla $ (signo de dólar) . Puede usar Apara moverse al final de la línea y cambiar al modo de edición (Agregar). Para saltar el último carácter no en blanco, puede presionar ga continuación _las teclas.

Lo contrario de Aes I(Modo de inserción al comienzo de la línea), como un lado. Presionando solo ^colocará el cursor en el primer carácter de la línea que no sea un espacio en blanco.

dvorak
fuente
81
Saltar al último no en blancog_
SergioAraujo
2
A veces es más útil la g_variación, ya que no incluye caracteres en blanco
rogercampos
66
La variante _g es realmente útil cuando se trabaja en modo visual, ya que le permite usar la línea sin ninguna línea nueva al final.
Greg Robbins
2
Mientras que las teclas Inicio y Fin funcionan en un teclado normal, se necesitan $ y ^ cuando usa una computadora portátil :)
Sridhar Sarnobat
Deberías agregar ^ a la lista.
Tek
304

Como mucha gente ha dicho:

  • $ te lleva al final de la línea

pero también:

  • ^o lo _lleva al primer carácter que no es un espacio en blanco en la línea, y
  • 0(cero) te lleva al comienzo de la línea incl. espacio en blanco
Rob Wells
fuente
Yo sabia | nos lleva al comienzo de la línea pero no estaba al tanto de 0. Entonces, tanto 0 como | hacer exactamente lo mismo, ¿sí?
Kamran Bigdely
8
@kami: aunque las descripciones son diferentes, parecen comportarse de manera idéntica. Sin embargo, el |comando de tubería puede contar, por ejemplo, 3 | para saltar a la tercera columna.
Paul Ruane
136
  • $ se mueve al último personaje en la línea.
  • g _ va al último carácter que no sea un espacio en blanco.

  • g $ va al final de la línea de la pantalla (cuando una línea de búfer se ajusta a varias líneas de pantalla)

Paul Ruane
fuente
Siento que g_ es lo mismo que $ b
Dave Aaron Smith
3
@DaveAaronSmith: bva al comienzo de la palabra anterior, que no es lo mismo en absoluto. Es más o menos equivalente a $ge.
Paul Ruane
99
Utilizo _y g_para visual / yanking, ya $que también copiará / eliminará el carácter de nueva línea (LN).
Ernest
Para mí, $ va al final de la línea de pantalla actual (cuando se ajusta). No he logrado entender por qué. g_es la única forma que encontré para llegar al final real de la línea.
ezuk
@ezuk $va al final de la línea incluso cuando está envuelto para mí. No conozco ninguna configuración para ajustar su comportamiento. Tal vez ha sido reasignado por su .vimrc a g$?
Paul Ruane
66

La pregunta principal: fin de línea

$ va al final de la línea, permanece en modo comando

A va al final de la línea, cambia al modo de inserción

Por el contrario, inicio de línea (técnicamente, el primer carácter que no es un espacio en blanco )

^ va al inicio de la línea, permanece en modo comando

I (mayúscula i) va al inicio de la línea, cambia al modo de inserción

Además - inicio de línea (técnicamente la primera columna independientemente del espacio en blanco )

0 (cero) va al inicio de la línea, permanece en modo comando

0i (cero seguido de minúscula i) va al inicio de la línea, cambia al modo de inserción

Para aquellos que comienzan a aprender vi, aquí hay una buena introducción a vi al enumerar los comandos vi lado a lado con el movimiento típico del cursor del editor de la GUI de Windows y las teclas de acceso directo.

vi editor para usuarios de Windows

ap-osd
fuente
3
El análogo a Ino es 0sino ^, ya que ambos Iy ^van al primer carácter de la línea que no es un espacio en blanco, sino que 0van a la columna cero (como su nombre lo indica).
wchargin
@wchargin cierto, pensé que parece que no puedo encontrar cuál 0sería el análogo de (vaya al primer carácter (= columna 0) de la línea y vaya al modo de inserción)
franssu
@franssu: El único que conozco es 0i. :-)
wchargin
@wchargin - Gracias por la corrección técnica. He actualizado la publicación.
ap-osd
42

Si su línea actual se ajusta alrededor de la pantalla visible en la siguiente línea, puede usar g $ para llegar al final de la línea de la pantalla .

El comodoro Jaeger
fuente
3
Acabo de descubrir que están pendientes los comandos arriba y abajo con g hacer que vim mueva el cursor basado en la pantalla, en lugar de en la línea. Es decir, gj y gk le permiten moverse hacia arriba y hacia abajo en una línea larga. Realmente util.
Druckles el
1
También descubrí que escribir gw y algo parece cambiar j y k permanentemente para comportarse así. No estoy seguro de cómo o por qué. ¿Alguien puede explicar esto?
Druckles el
44
@Druckles: un poco de respuesta tardía, pero si todavía te estás preguntando (o si alguien más está leyendo esto) gwy gqson comandos que reformatean el texto. (ver :h gwy :h gq) Lo que probablemente sucedió fue que hiciste gw{motion}y cambiaste un texto para que las líneas de la pantalla correspondieran a las líneas reales.
pandubear
14

El signo de dólar: $

David Singer
fuente
13

En muchos casos, cuando estamos dentro de una cadena estamos encerrados entre comillas dobles, o al escribir una declaración no queremos presionar escape e ir al final de esa línea con la tecla de flecha y presionar el punto y coma ( ;) solo para terminar la línea. Escriba la siguiente línea dentro de su archivo vimrc :

imap <C-l> <Esc>$a

¿Qué dice la línea? Asigna Ctrl + l a una serie de comandos. Es equivalente a presionar Esc(modo comando), $(final de línea), a(agregar) de una vez.

Pramod
fuente
gracias por eso He estado queriendo agregar Ctrl-e a mi vim como ir al final de la línea como en mi primera máquina y no sabía cómo
tristanbailey
1
Como dice la respuesta aceptada, puede presionar A para hacer lo mismo.
trysis
44
@trysis que entendiste mal, esto no se aleja del modo de edición, lo cual es bastante bueno.
Marconi
2
Tienes razón. vimciertamente le permite hacer mucho más en mucho menos tiempo con cosas como esta. @razorxpress, sería un ajuste menor imap <C-l> <Esc>A, que hace que Ctrl + l sea el equivalente a presionar Esc(salir del modo de inserción), luego A(agregar al final de la línea).
trysis
3
Creo que la forma más idiomática de mapear esto seríainoremap <C-l> <C-o>A
bennyty
12

La ventaja de la tecla 'Fin' es que funciona tanto en modo normal como en modo de inserción.

'$' funciona solo en modo normal / comando pero también funciona en el editor vi clásico (es bueno saber cuando vim no está disponible).

Diastrofismo
fuente
38
¿Para qué andas por el modo de inserción? Ningún ciudadano decente ordinario va allí después del día. Sabes lo que pasa allí, ¿no? El código desaparece allí, ¿sabes? Desaparece, y nunca más se supo de él.
Torre de
3
Gracias por esto, ya que me gusta permanecer en el modo Insertar una vez que lo ingresé. Lamentablemente, mi computadora portátil no tiene una tecla Finalizar. :(
ray
12

También tenga en cuenta la distinción entre línea (o quizás línea física) y línea de pantalla . Una línea finaliza con el carácter Fin de línea ("\ n"). Una línea de pantalla es lo que se muestra como una fila de caracteres en su terminal o en su pantalla. Los dos se separan si tiene líneas físicas más largas que el ancho de la pantalla, lo cual es muy común al escribir correos electrónicos y demás.

La distinción también se muestra en los comandos de fin de línea.

  • $y 0pasar al final o al principio de la línea o párrafo físico, respectivamente:
  • g$y g0pasar al final o al principio de la línea o párrafo de la pantalla, respectivamente.

Si siempre prefiere el último comportamiento, puede reasignar las teclas de esta manera:

:noremap 0 g0
:noremap $ g$
loevborg
fuente
1
¿Cómo llegar al último espacio no en blanco de la línea? (ya sea una línea de pantalla o una línea física)
Kamran Bigdely
g_es el último espacio no en blanco de la línea física . ¿Qué tal línea de pantalla?
trysis
10

Presione Apara ingresar al modo de edición comenzando al final de la línea.

Brian
fuente
9

O hay una respuesta obvia: use la Endtecla para ir al final de la línea.

davr
fuente
1
Sí, la terminal mac es una que he notado que secuestra las claves y no las pasa a las cosas que se ejecutan dentro de la terminal. Una de las cosas que me molesta cada vez que uso un Mac por un tiempo.
davr
El punto de usar vim no es tener que usar teclas como 'Fin'. Nunca salgas de la fila de casa.
Jon Thoroddsen
77
En Mac no hay tecla Finalizar.
kenorb
1
@kenorb Hubo cuando publiqué el comentario ... pero a Apple le gusta eliminar funciones a lo largo de los años. netdna.webdesignerdepot.com/uploads/2009/01/… este es en realidad uno de mis teclados favoritos de todos los tiempos
davr
9

No puedo ver la tecla de acceso rápido para macbook para usar vim en terminal estándar Espero que ayude a alguien. Para usuarios de macOS (probado en macbook pro 2018):

fn+ - mover a la línea de inicio

fn+ - mover a la línea final

fn+ - subir página

fn+ - mueve la página hacia abajo

fn+ g - mueve el cursor al comienzo del documento

fn+ shift + g - mueve el cursor al final del documento

Para los dos últimos comandos, en algún momento debe tocar dos veces.

Alexander Yushko
fuente
6

Posiblemente no relacionado, pero si desea comenzar una nueva línea después de la línea actual, puede usar o en cualquier lugar de la línea.

graywh
fuente
3

La opción más fácil sería ingresar $. Si está trabajando con bloques de texto, puede apreciar el comando {y }para mover un párrafo hacia atrás y hacia adelante, respectivamente.

paranza
fuente
2

Estaba acostumbrado a Inicio / Fin, llevándome al inicio y al final de las líneas en modo Insertar (desde el uso en Windows y creo que Linux), que Mac no admite. Esto es particularmente molesto porque cuando estoy usando vim en un sistema remoto, tampoco puedo hacerlo fácilmente. Después de algunas pruebas y errores dolorosos, se me ocurrieron estas .vimrclíneas que hacen lo mismo, pero vinculadas a Ctrl-A para el inicio de la línea y Ctrl-D para el final de la línea. (Por alguna razón, Ctrl-E supongo que está reservado o al menos no pude encontrar una manera de vincularlo). Disfruta.

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

Aquí hay un buen gráfico para los códigos de caracteres de control ASCII aquí para otros también:

http://www.physics.udel.edu/~watson/scen103/ascii.html

También puedes hacer Ctrl-V + Ctrl- también, pero eso no pega tan bien en lugares como este.

Marcus
fuente