Como passo para o final da linha no Vim?

1194

Eu sei como geralmente me movo no modo de comando, especificamente, pulando para linhas, etc. Mas qual é o comando para pular para o final da linha em que estou atualmente?

salt.racer
fonte
19
Comandos básicos do vim abordados em menos de 10 minutos youtube.com/watch?v=71YTkxUNwmg
eomeroff
14
O que há de errado em passar alguns minutos executando o vimtutor? Já faz parte da instalação do Vim e mostra o básico.
Dash-tom-bang
@ dash-tom-bang Bem, eles têm uma pontuação bastante alta aqui ... :) Mas sim, você está certo vimtutoré ótimo. Provavelmente eles não sabiam disso?
Pryftan 6/01

Respostas:

2051

Apenas a tecla $ (cifrão) . Você pode usar Apara ir para o final da linha e mudar para o modo de edição (Anexar). Para saltar o último caractere não-branco, você pode pressionar gentão _chaves.

O oposto de Aé I(modo Inserir no início da linha), como um aparte. Pressionar apenas o ^posicionará o cursor no primeiro caractere não-branco da linha.

dvorak
fonte
81
Salte para o último espaço em brancog_
SergioAraujo
2
Às vezes é mais útil a g_variação, uma vez que não inclui caracteres em branco
rogercampos
6
A variante _g é realmente útil ao trabalhar no modo visual, pois permite usar a linha sem nenhuma nova linha no final.
22712 Greg
2
Enquanto Home e End teclas funcionam em um teclado regular, e ^ são necessários $ quando você estiver usando um laptop :)
Sridhar Sarnobat
Você deve adicionar ^ à lista.
Tek
304

Como muitas pessoas disseram:

  • $ leva você até o fim da linha

mas também:

  • ^ou _leva você ao primeiro caractere que não é um espaço em branco na linha e
  • 0(zero) leva você ao início da linha incl. espaço em branco
Rob Wells
fonte
Eu sabia | nos leva ao início da linha, mas eu não estava ciente de 0. Então, 0 e | faça exatamente a mesma coisa, sim?
Kamran Bigdely
8
@kami: embora as descrições sejam diferentes, elas parecem se comportar de forma idêntica. No entanto, o |comando pipe pode fazer uma contagem, por exemplo, 3 | para pular para a terceira coluna.
Paul Ruane
136
  • $ move para o último caractere na linha.
  • g _ vai para o último caractere que não é um espaço em branco.

  • g $ vai para o final da linha da tela (quando uma linha de buffer é quebrada em várias linhas da tela)

Paul Ruane
fonte
Eu sinto que g_ é a mesma coisa que $ b
Dave Aaron Smith
3
@DaveAaronSmith: bvai para o início da palavra anterior que não é a mesma coisa. É aproximadamente equivalente a $ge.
Paul Ruane 29/03
9
Eu uso _e g_para visual / puxar, como $também copiará / excluirá o caractere de nova linha (LN).
Ernest
Para mim, $ vai para o final da linha de tela atual (quando quebrada). Eu não consegui descobrir o porquê. g_é a única maneira que encontrei para chegar ao final da linha.
ezuk
O @ezuk $vai para o final da linha mesmo quando embrulhado para mim. Não conheço nenhuma configuração para ajustar seu comportamento. Talvez tenha sido remapeado pelo seu .vimrc para g$?
Paul Ruane
66

A principal questão - fim de linha

$ vai para o final da linha, permanece no modo de comando

A vai para o final da linha, alterna para o modo de inserção

Inversamente - início da linha (tecnicamente o primeiro caractere que não é um espaço em branco )

^ vai para o início da linha, permanece no modo de comando

I (i maiúsculo) vai para o início da linha, alterna para o modo de inserção

Além disso - início da linha (tecnicamente a primeira coluna, independentemente do espaço em branco )

0 (zero) vai para o início da linha, permanece no modo de comando

0i (zero seguido de i minúsculo) passa o início da linha, alterna para o modo de inserção

Para quem está começando a aprender o vi, aqui está uma boa introdução ao vi, listando lado a lado os comandos do vi para o movimento típico do cursor do Windows GUI Editor e as teclas de atalho.

editor vi para usuários do Windows

ap-osd
fonte
3
O análogo a Inão é 0senão ^, como ambos, Ie ^vai para o primeiro caractere que não seja um espaço em branco da linha, mas 0vai para a coluna zero (como o próprio nome indica).
wchargin
@charchar verdade, pensei que eu não consigo encontrar o que 0seria o análogo ? (ir para o primeiro carácter (= coluna 0) da linha e ir para o modo de inserção)
franssu
@ranssu: O único que eu sei é 0i. :-)
wchargin
@ wchargin - Obrigado pela correção técnica. Eu atualizei a postagem.
precisa saber é
42

Se a sua linha atual passa a tela visível para a próxima linha, você pode usar g $ para chegar ao final da linha da tela .

Comodoro Jaeger
fonte
3
Acabei de descobrir pré-pendentes os comandos para cima e para baixo com g fazer o vim mover o cursor com base na tela, e não na linha. Ou seja, gj e gk permitem mover para cima e para baixo em uma linha longa. Muito útil.
Druckles
1
Também descobriu que gw digitação e algo parece mudar j e k permanentemente a comportar-se assim. Não sabe como ou por quê. Alguém pode explicar isso?
Druckles
4
@ Druckles: Um pouco de resposta tardia, mas se você ainda está se perguntando ((ou se alguém mais estiver lendo isso)) gwe gqsão comandos que reformatam o texto. (ver :h gwe :h gq) O que provavelmente aconteceu foi que você fez gw{motion}e alterou algum texto para que as linhas da tela correspondessem às linhas reais.
Pandubear
14

O cifrão: $

David Singer
fonte
13

Em muitos casos, quando estamos dentro de uma string, estamos entre aspas duplas ou enquanto escrevemos uma declaração, não queremos pressionar escape e ir para o final dessa linha com a tecla de seta e pressionar o ponto e vírgula ( ;) apenas para finalizar a linha. Escreva a seguinte linha dentro do seu arquivo vimrc :

imap <C-l> <Esc>$a

O que a linha diz? Ele mapeia Ctrl + l para uma série de comandos. É equivalente a você pressionar Esc(modo de comando), $(fim da linha), a(anexar) de uma só vez.

Pramod
fonte
obrigado por esse. Fui querer adicionar Ctrl-e voltar para o meu vim como ir para o fim da linha como na minha primeira máquina e saber não funcionavam como
tristanbailey
1
Como a resposta aceita diz, você pode pressionar A para fazer a mesma coisa.
trysis
4
@ análise que você entendeu mal, isso não se afasta do modo de edição, o que é bastante bom.
Marconi
2
Você está certo. vimcertamente permite que você faça muito mais em muito menos tempo com coisas assim. @razorxpress, um pequeno ajuste seria imap <C-l> <Esc>A, o que torna Ctrl + l o equivalente a pressionar Esc(sair do modo de inserção) e depois A(anexar ao final da linha).
trysis
3
Acho que a maneira mais idiomática para mapear isso seriainoremap <C-l> <C-o>A
bennyty
12

A vantagem da tecla 'End' é que ela funciona nos modos normal e de inserção.

'$' funciona apenas no modo normal / comando, mas também no editor vi clássico (é bom saber quando o vim não está disponível).

Diastrofismo
fonte
38
O que você está usando no modo de inserção ?! Nenhum cidadão comum decente vai para lá depois do dia. Você sabe o que acontece lá, não é? O código desaparece aí, sabe? Ele desaparece e nunca mais é ouvido.
Rook
3
Obrigado por isso, pois eu gosto de permanecer no Modo de inserção depois de entrar. Infelizmente, meu laptop não possui uma tecla Encerrar. :(
ray
12

Observe também a distinção entre linha (ou talvez linha física) e linha da tela . Uma linha é finalizada pelo caractere Fim da Linha ("\ n"). Uma linha da tela é o que quer que seja mostrado como uma linha de caracteres no seu terminal ou na sua tela. Os dois se separam se você tiver linhas físicas maiores que a largura da tela, o que é muito comum ao escrever e-mails.

A distinção também aparece nos comandos de fim de linha.

  • $e 0vá para o final ou o início da linha ou parágrafo físico, respectivamente:
  • g$e g0vá para o final ou o início da linha ou parágrafo da tela, respectivamente.

Se você sempre prefere o último comportamento, pode remapear as chaves assim:

:noremap 0 g0
:noremap $ g$
Loevborg
fonte
1
Como chegar ao último espaço não em branco da linha? (quer se trate de uma linha de tela ou linha física)
Kamran Bigdely
g_é o último espaço não em branco da linha física . E a linha da tela?
trysis
10

Pressione Apara entrar no modo de edição começando no final da linha.

Brian
fonte
9

Ou há a resposta óbvia: use a Endtecla para ir até o final da linha.

davr
fonte
1
Sim, o terminal mac é um que eu notei que seqüestra chaves e não as repassa para as coisas que estão dentro do terminal. Uma das coisas que me incomoda sempre que uso um mac um pouco.
davr 31/08
O objetivo principal do uso do vim não é ter que usar chaves como 'End'. Nunca saia da linha de casa.
9136 Jon Thoroddsen
7
No Mac, não há tecla Encerrar.
Kenorb 5/05
1
@kenorb Houve quando publiquei o comentário ... mas a Apple gosta de remover recursos ao longo dos anos. netdna.webdesignerdepot.com/uploads/2009/01/... este é realmente um dos meus teclados favoritos de todos os tempos
davr
9

Não consigo ver as teclas de atalho do macbook para usar o vim no terminal padrão. Espero que ajude alguém. Para usuários do macOS (testado no macbook pro 2018):

fn+ - mover para a linha inicial

fn+ - mover para a linha final

fn+ - mover a página para cima

fn+ - mover a página para baixo

fn+ g - move o cursor para o início do documento

fn+ shift + g - move o cursor para o final do documento

Nos últimos dois comandos, em algum momento, é necessário tocar duas vezes.

Alexander Yushko
fonte
6

Possivelmente não relacionado, mas se você deseja iniciar uma nova linha após a linha atual, pode usar o em qualquer lugar da linha.

graywh
fonte
3

A opção mais fácil seria digitar $. Se você estiver trabalhando com blocos de texto, poderá apreciar o comando {e }para mover um parágrafo para frente e para trás, respectivamente.

paranza
fonte
2

Eu estava acostumado ao Home / End, levando-me ao início e ao fim das linhas no modo Inserir (do uso no Windows e acho que no Linux), que o Mac não suporta. Isso é particularmente irritante porque, quando estou usando o vim em um sistema remoto, também não consigo fazer isso facilmente. Após algumas tentativas e erros dolorosos, criei essas .vimrclinhas que fazem a mesma coisa, mas vinculei a Ctrl-A para o início da linha e Ctrl-D para o final da linha. (Por algum motivo, acho que Ctrl-E é reservado ou, pelo menos, não consegui descobrir uma maneira de vinculá-lo.) Aproveite.

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

Há um bom gráfico aqui para os códigos de caracteres de controle ASCII aqui para outros também:

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

Você também pode usar Ctrl-V + Ctrl-, mas isso também não se cola a lugares como este.

Marcus
fonte