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?


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.


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

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)


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


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 .


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


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.


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).


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$

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.


9

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


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.


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.