Come posso spostarmi alla fine della linea in Vim?


1194

So generalmente spostarmi nella modalità di comando, in particolare, saltare alle linee, ecc. Ma qual è il comando per saltare alla fine della linea in cui mi trovo attualmente?


19
Comandi vim di base coperti in meno di 10 minuti youtube.com/watch?v=71YTkxUNwmg
eomeroff

14
Cosa c'è di sbagliato nel passare qualche minuto a correre attraverso vimtutor? Fa già parte dell'installazione di Vim e ti mostra le basi.
dash-tom-bang,

@ dash-tom-bang Beh, hanno ottenuto un punteggio abbastanza alto qui ... :) Ma sì, hai ragione, vimtutorè fantastico. Probabilmente non lo sapevano?
Pryftan,

Risposte:


2052

Solo il tasto $ (simbolo del dollaro) . È possibile utilizzare Aper spostarsi alla fine della riga e passare alla modalità di modifica (Aggiungi). Per saltare l'ultimo carattere non vuoto, è possibile premere gquindi i _tasti.

L'opposto di Aè I(modalità Inserisci all'inizio della riga), a parte. Premendo solo il ^cursore posizionerà il primo carattere non vuoto della riga.


81
Vai all'ultimo non vuotog_
SergioAraujo,

2
A volte è più utile la g_variazione in quanto non include caratteri vuoti
rogercampos,

6
La variante _g è davvero utile quando si lavora in modalità visiva, in quanto consente di utilizzare la linea senza alcuna nuova riga alla fine.
Greg Robbins,

2
Mentre i tasti Home e End funzionano su una tastiera normale, $ e ^ sono necessari quando si utilizza un laptop :)
Sridhar Sarnobat

È necessario aggiungere ^ all'elenco.
Tek,

304

Come molte persone hanno detto:

  • $ ti porta alla fine della linea

ma anche:

  • ^o _ti porta al primo personaggio non bianco nella riga e
  • 0(zero) ti porta all'inizio della riga incl. spazio bianco

Sapevo | ci porta all'inizio della riga ma non ero a conoscenza di 0. Quindi sia 0 che | fare esattamente la stessa cosa, sì?
Kamran Bigdely,

8
@kami: sebbene le descrizioni siano diverse, sembrano comportarsi in modo identico. Tuttavia, il |comando pipe può contare, ad esempio 3 | per saltare alla terza colonna.
Paul Ruane,

136
  • $ si sposta sull'ultimo carattere sulla linea.
  • g _ va all'ultimo carattere non bianco.

  • g $ va alla fine della linea dello schermo (quando una linea di buffer viene spostata su più linee dello schermo)


Sento che g_ è la stessa cosa di $ b
Dave Aaron Smith il

3
@DaveAaronSmith: bva all'inizio della parola precedente che non è affatto la stessa cosa. È approssimativamente equivalente a $ge.
Paul Ruane,

9
Io uso _e g_per visual / yanking, così come $copierò / eliminerò il nuovo carattere di linea (LN).
Ernest,

Per me, $ va alla fine della riga dello schermo corrente (se racchiuso). Non sono riuscito a capire perché. g_è l'unico modo che ho trovato per arrivare alla fine effettiva della linea.
ezuk,

@ezuk $arriva alla fine della linea anche se avvolto per me. Non conosco alcuna impostazione per regolarne il comportamento. Forse è stato rimappato dal tuo .vimrc g$?
Paul Ruane,

66

La domanda principale: fine della linea

$ va alla fine della riga, rimane in modalità comando

A va alla fine della riga, passa alla modalità di inserimento

Viceversa - inizio della riga (tecnicamente il primo carattere non bianco )

^ va all'inizio della riga, rimane in modalità comando

I (i maiuscola) va all'inizio della riga, passa alla modalità di inserimento

Inoltre - inizio della linea (tecnicamente la prima colonna indipendentemente dallo spazio )

0 (zero) va all'inizio della riga, rimane in modalità comando

0i (zero seguito da i minuscoli) passa all'inizio della riga, passa alla modalità di inserimento

Per coloro che iniziano a imparare vi, ecco una buona introduzione a vi elencando i comandi vi affiancati al tipico movimento del cursore dell'editor della GUI di Windows e ai tasti di scelta rapida.

vi editor per utenti Windows


3
L'analogo a Inon è 0ma ^, come entrambi Ie ^va al primo carattere non bianco della riga ma 0va alla colonna zero (come suggerisce il nome).
wchargin,

@wchargin vero, hai pensato di non riuscire a trovare quale 0sarebbe l'analogo di ? (vai al primo carattere (= colonna 0) della riga e vai alla modalità di inserimento)
franssu

@franssu: l'unico che io conosca è 0i. :-)
wchargin,

@wchargin - Grazie per la correttezza tecnica. Ho aggiornato il post.
ap-osd,

42

Se la riga corrente si avvolge attorno allo schermo visibile sulla riga successiva, puoi usare g $ per arrivare alla fine della riga dello schermo .


3
Ho appena scoperto pre-in attesa dei comandi su e giù con g per spostare il cursore in base allo schermo, piuttosto che alla riga. Cioè gj e gk ti permettono di muoverti su e giù su una lunga fila. Davvero utile.
Druckles,

1
Ho anche scoperto che digitando gw e qualcosa sembra cambiare in modo permanente j e k per comportarsi in questo modo. Non sono sicuro di come o perché. Qualcuno può spiegare questo?
Druckles,

4
@Druckles: un po 'di risposta in ritardo, ma se ti stai ancora chiedendo, (o se qualcun altro sta leggendo questo) gwe gqsono comandi che riformattano il testo. (vedi :h gwe :h gq) Quello che probabilmente è successo è stato che hai fatto gw{motion}e modificato del testo in modo che le linee dello schermo corrispondessero alle linee effettive.
pandubear,


13

In molti casi, quando siamo all'interno di una stringa, siamo racchiusi tra virgolette doppie o quando scriviamo un'istruzione non vogliamo premere Esc e andare alla fine di quella riga con il tasto freccia e premere il punto e virgola ( ;) solo per terminare la linea. Scrivi la seguente riga nel tuo file vimrc :

imap <C-l> <Esc>$a

Cosa dice la linea? Associa Ctrl + l a una serie di comandi. Equivale a premere contemporaneamente Esc(modalità di comando), $(fine riga), a(aggiungi).


grazie per quello. Volevo aggiungere Ctrl-e al mio video come andare alla fine della linea come sulla mia prima macchina e non sapevo come fare
tristanbailey,

1
Come dice la risposta accettata, puoi premere A per fare la stessa cosa.
trysis,

4
@trysis hai capito male, questo non si allontana dalla modalità di modifica che è abbastanza bella.
Marconi,

2
Hai ragione. vimti permette sicuramente di fare molto di più in molto meno tempo con cose come questa. @razorxpress, sarebbe una regolazione minore imap <C-l> <Esc>A, che rende Ctrl + l l'equivalente della pressione Esc(esci dalla modalità di inserimento), quindi A(aggiungi alla fine della riga).
trysis

3
Penso che il modo più idiomatico di mappare questo sarebbeinoremap <C-l> <C-o>A
bennyty

12

Il vantaggio del tasto 'Fine' è che funziona sia in modalità normale che in modalità inserimento.

'$' funziona solo in modalità normale / comando ma funziona anche nel classico editor vi (utile sapere quando vim non è disponibile).


38
A cosa tieni in giro la modalità di inserimento ?! Nessun cittadino decente normale ci va dopo la luce del giorno. Sai cosa succede lì dentro, vero? Il codice scompare lì, sai? Scompare e non si fa più sentire.
Torre del

3
Grazie per questo, poiché mi piace rimanere in modalità Inserisci dopo averlo inserito. Sfortunatamente il mio laptop non ha una chiave End. :(
ray,

12

Nota anche la distinzione tra linea (o forse linea fisica) e linea dello schermo . Una riga termina con il carattere Fine linea ("\ n"). Una linea di schermo è qualsiasi cosa accada che viene mostrata come una fila di caratteri nel tuo terminale o nella tua schermata. I due si separano se si hanno linee fisiche più lunghe della larghezza dello schermo, il che è molto comune quando si scrivono e-mail e simili.

La distinzione compare anche nei comandi di fine riga.

  • $e 0spostati rispettivamente alla fine o all'inizio della riga o del paragrafo fisico:
  • g$e g0spostare rispettivamente alla fine o all'inizio della riga o del paragrafo dello schermo.

Se preferisci sempre quest'ultimo comportamento, puoi rimappare i tasti in questo modo:

:noremap 0 g0
:noremap $ g$

1
Come arrivare all'ultimo spazio non bianco della linea? (che si tratti di una linea dello schermo o di una linea fisica)
Kamran Bigdely,

g_è l'ultimo non-spazio bianco della linea fisica . Che ne dici della linea dello schermo?
trysis,

10

Premere Aper accedere alla modalità di modifica a partire dalla fine della riga.


9

Oppure c'è la risposta ovvia: usa il Endtasto per andare alla fine della riga.


1
Sì, il terminale mac è uno che ho notato che dirotta le chiavi e non le passa alle cose che corrono all'interno del terminale. Una delle cose che mi infastidisce ogni volta che uso un mac per un po '.
davr

L'intero punto di usare vim non è dover usare chiavi come 'End'. Non lasciare mai la fila di casa.
Jon Thoroddsen,

7
Su Mac non esiste un tasto Fine.
Kenorb,

1
@kenorb C'è stato quando ho pubblicato il commento ... ma ad Apple piace rimuovere funzionalità nel corso degli anni. netdna.webdesignerdepot.com/uploads/2009/01/… questa è in realtà una delle mie tastiere preferite di tutti i tempi
davr

9

Non riesco a vedere il tasto di scelta rapida per macbook per l'uso di vim nel terminale standard. Spero che possa aiutare qualcuno. Per utenti macOS (testato su macbook pro 2018):

fn+ - passa alla riga iniziale

fn+ - passa alla fine

fn+ - sposta la pagina in alto

fn+ - sposta la pagina verso il basso

fn+ g - sposta il cursore all'inizio del documento

fn+ shift + g - sposta il cursore alla fine del documento

Per gli ultimi due comandi a volte è necessario toccare due volte.


6

Forse non correlato, ma se si desidera iniziare una nuova riga dopo la riga corrente, è possibile utilizzare o in qualsiasi punto della riga.


3

L'opzione più semplice sarebbe quella di digitare $. Se stai lavorando con blocchi di testo, potresti apprezzare il comando {e }per spostare rispettivamente un paragrafo avanti e indietro.


2

Ero abituato a Home / End portandomi all'inizio e alla fine delle linee in modalità Inserisci (dall'uso in Windows e penso che Linux), che Mac non supporta. Questo è particolarmente fastidioso perché quando sto usando VIM su un sistema remoto, non riesco nemmeno a farlo facilmente. Dopo alcuni tentativi dolorosi, ho trovato queste .vimrclinee che fanno la stessa cosa, ma sono associate a Ctrl-A per l'inizio della linea e Ctrl-D per la fine della linea. (Per qualche motivo, credo che Ctrl-E sia riservato o almeno non riesco a trovare un modo per legarlo.) Divertiti.

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

C'è un buon grafico qui per i codici dei caratteri di controllo ASCII anche qui per gli altri:

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

Puoi anche fare Ctrl-V + Ctrl-, ma questo non si incolla anche in posti come questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.