Como saio do editor Vim?


3765

Estou preso e não posso escapar. Diz:

"type :quit<Enter> to quit VIM"

Mas quando eu digito isso simplesmente aparece no corpo do objeto.


131
Você está apenas tentando sair do VIM? Se for esse o caso, pressione "escape" e digite ': q'
pop

47
Não esqueça os dois pontos ! Você deve digitar :quite pressionar a [ENTER]tecla
Farahmand

88
É realmente fácil aprender o básico do vim, e está embutido no seu sistema. No terminal, digite "vimtutor". 25 minutos depois, você estará indo mais rápido do que o seu editor de texto usual!
Mark Robson

4
Confira aqui mais comandos.
Toni

78
Para evitar git commitenviá-lo para vim no futuro: git config --global core.editor="nano"
Tom Kelly

Respostas:


4904

Pressione a Esctecla para entrar no "modo normal". Em seguida, você pode digitar :para entrar no "modo de linha de comando". Dois pontos ( :) aparecerão na parte inferior da tela e você poderá digitar um dos seguintes comandos. Para executar um comando, pressione a Entertecla

  • :q sair (abreviação de :quit)
  • :q!sair sem salvar (abreviação de :quit!)
  • :wq escrever e sair
  • :wq! para escrever e sair mesmo se o arquivo tiver apenas permissão de leitura (se o arquivo não tiver permissão de gravação: forçar gravação)
  • :x escrever e sair (semelhante a :wq, mas somente escreva se houver alterações)
  • :exitpara escrever e sair (o mesmo que :x)
  • :qasair de tudo (abreviação de :quitall)
  • :cq sair sem salvar e fazer com que o Vim retorne um erro diferente de zero (ou seja, saia com erro)

Você também pode sair do Vim diretamente do "modo Normal" digitando ZZpara salvar e sair (igual a :x) ou ZQapenas sair (igual a :q!). (Observe que o caso é importante aqui. ZZE zznão significa a mesma coisa.)

O Vim tem uma ajuda abrangente - que você pode acessar com o :helpcomando - onde você pode encontrar respostas para todas as suas perguntas e um tutorial para iniciantes.


15
A menos que você tenha remapeado esc ou tenha um mapeamento estranho no seu .vimrc, ele definitivamente deveria. Se estiver no linux, digite xev e verifique se escape é o tipo de chave que você obtém ao pressionar escape.
dirvine

17
Lembre-se de que você pode usar ctrl + c se não puder usar Esc (como eu, porque meu shell está no TotalTerminal). Você
está em

25
:x== ZZmas :x! = :wq. :xescreva arquivo se o arquivo for alterado, :wqescreva sempre o arquivo (importa quando estiver usando inotify).
Hauleth

36
Para ser sincero, tenho mais dificuldade em usar o sistema de ajuda do vim do que usar o próprio vim e confio principalmente em cartões de referência rápida e documentação on-line.
bgvaughan

18
Se você não tem permissões no arquivo, mas têm permissões sudo:w ! sudo tee %
tvlooy

190

As imagens valem mil comandos e opções do Unix:

Digite a descrição da imagem aqui

Eu desenho isso para meus alunos a cada semestre e eles parecem entender o vi depois.

vi é uma máquina de estados finitos com apenas três estados.

Ao iniciar, o vi entra no modo COMMAND, onde você pode digitar comandos curtos, com poucos caracteres, às cegas . Você sabe o que está fazendo; isso não é para amadores.

Quando você realmente deseja editar o texto, deve entrar no modo INSERIR com algum comando de um caractere:

  • i: vá para INSERIR no lugar do cursor
  • I: vá para o modo INSERIR no início da linha
  • a: acrescentar após o cursor
  • A: acrescente no final da linha
  • o: abre uma nova linha abaixo da linha atual
  • O: abre uma nova linha no lugar da linha atual

Agora, respondendo à pergunta: saindo.

Você pode sair do vi do modo EX:

  • q: se você não fez nenhuma modificação ou as salvou antes
  • q !: ignora qualquer modificação e sai
  • wq: salvar e sair
  • x: isso é igual a wq

we xaceite um parâmetro de nome de arquivo. Se você iniciou o vi com um nome de arquivo, não precisa fornecê-lo aqui novamente.

Por fim, o mais importante: como você pode acessar o modo EX?

O modo EX é para comandos longos que você pode ver digitando na linha inferior da tela. No modo COMMAND, você pressiona dois pontos, :e dois pontos aparecerão na linha inferior, onde você pode digitar os comandos acima.

No modo INSERT, você precisa pressionar ESC, ou seja, o botão Escape, passando para o modo COMMAND e depois: para ir para o modo EX.

Se não tiver certeza, pressione ESC e isso o levará ao modo de comando.

Portanto, o método robusto é ESC -: - x-Enter, que salva seu arquivo e sai.


5
Obrigado, a imagem é muito útil. No entanto, para mim wnão muda do modo Ex para o comando, mas Escsim. O que estou fazendo errado?
amigos estão

2
Se você escrever w-Enter, o arquivo será salvo e voltará ao modo COMMAND. Eu escrevi para ter uma imagem completa dos comandos salvar e sair.
Gergely

3
oh, então você quer dizer :w. Então faz todo o sentido. A propósito, existe um comando para recarregar do disco (ou seja, reverter as alterações, mas não fechar o arquivo)? Nesse caso, pode ser o próximo wno diagrama.
Nick Volynkin

2
@Gergely Acabei de descobrir a confusão! A partir dos documentos, o modo normal também é chamado de modo de comando ! Então, modo de comando! = Modo de linha de comando. Uau!
jpaugh

2
@NickVolynkin o comando para recarregar a partir do disco é :e(ou mais provável :e!, uma vez que irá avisá-lo sobre alterações não salvas sem a !)
JDS

177

Antes de digitar um comando, atingiu a Escchave . Depois de inseri-lo, pressione o Returnpara confirmar.

Escfinaliza o comando atual e alterna o Vim para o modo normal . Agora, se você pressionar :, o botão :aparecerá na parte inferior da tela. Isso confirma que você está realmente digitando um comando e não editando o arquivo.

A maioria dos comandos tem abreviaturas, com parte opcional entre colchetes: c[ommand].

Os comandos marcados com '*' são apenas para o Vim (não implementados no Vi).

Encerramento seguro (falha se houver alterações não salvas):

  • :q[uit] Sair da atual janela . Saia do Vim se esta for a última janela. Isso falha quando alterações foram feitas no buffer atual .
  • :qa[ll]Saia de todas as janelas e Vim, a menos que haja alguns buffers que foram alterados.

Prompt-quit (solicita se houver alterações não salvas)

  • :conf[irm] q[uit]* Saia, mas avise quando houver alguns buffers que foram alterados.
  • :conf[irm] xa[ll]* Escreva todos os buffers alterados e saia do Vim. Exiba um prompt quando alguns buffers não puderem ser gravados.

Escreva (salve) as alterações e saia:

  • :wqEscreva o arquivo atual (mesmo que não tenha sido alterado) e saia. A gravação falha quando o arquivo é somente leitura ou o buffer não tem um nome.:wqa[ll]* para todas as janelas.
  • :wq! O mesmo, mas grava até arquivos somente leitura. :wqa[ll]!* para todas as janelas.
  • :x[it], ZZ(com detalhes ). Escreva o arquivo apenas se ele tiver sido alterado e encerrado :xa[ll]* para todas as janelas.

Descartar alterações e sair:

  • :q[uit]! ZQ* Saia sem escrever, também quando os buffers visíveis tiverem alterações. Não sai quando há buffers ocultos alterados.
  • :qa[ll]!*, :quita[ll][!]* Saia do Vim, todas as alterações nos buffers (incluindo ocultos) são perdidas.

Pressione Returnpara confirmar o comando.

Esta resposta não faz referência a todos os comandos e argumentos de gravação e encerramento do Vim. De fato, eles são referenciados na documentação do Vim .

O Vim possui uma ampla ajuda interna, digite Esc:helpReturnpara abri-lo.

Essa resposta foi inspirada na outra , originalmente criada por @dirvine e editada por outros usuários do SO. Incluí mais informações da referência do Vim, comentários de SO e algumas outras fontes. As diferenças para Vi e Vim também são refletidas.


81

Se você deseja sair sem salvar no Vim e fazer com que o Vim retorne um código de saída diferente de zero, você pode usá-lo :cq.

Eu uso isso o tempo todo, porque não posso me incomodar em trocar de dedo !. Geralmente canalizo para o Vim coisas que não precisam ser salvas em um arquivo. Também temos um invólucro SVN ímpar em funcionamento, que deve ser encerrado com um valor diferente de zero para abortar um check-in.


19
Eu também usar isso para abortar um git commit, ou visudo, ou crontab, ...
Josh Lee

Interromper um commit do git :q!funciona bem, já que o git está procurando uma mensagem não vazia e não um código de saída diferente de zero.
moopet

Eu sei que funciona, é apenas isso: cq não requer a tecla Shift. :-)
Sue Spence

47

Esse é o pior cenário para sair do Vim, se você apenas quer sair, não tem idéia do que fez e não se importa com o que acontecerá com os arquivos que você abriu.

Ctrl-cEnterEnterviEnterCtrl-\Ctrl-n:qa!Enter

Isso deve tirar você na maioria das vezes.

Alguns casos interessantes em que você precisa de algo assim:

  • iCtrl-ovg (você entra no modo de inserção, depois no modo visual e depois no modo pendente do operador)

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (graças a porges para este caso)

  • :set insertmode(este é o caso quando Ctrl-\Ctrl-nvocê retorna ao modo normal)


Editar: Esta resposta foi corrigida devido aos casos acima. Costumava ser:

EscEscEsc:qa!Enter

No entanto, isso não funciona se você entrou no modo Ex. Nesse caso, você precisaria fazer:

viEnter:qa!Enter

Portanto, um comando completo para "Não quero saber o que fiz e não quero salvar nada, só quero sair agora!" seria

viEnterEscEscEsc:qa!Entrar


6
@cavalcade Este é um método extremamente geral para garantir que o editor esteja no modo normal e depois sair com segurança. Em uso normal, tudo o que você precisa é :qou:wq
Dan Passaro

6
Não é geral o suficiente! E se eu (iniciante) digitar i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>?
porges

@porges obrigado pelo caso de teste! Existem também outros casos de teste que provam que o método original foi lamentável. Eu editei a resposta para ser mais geral agora.
Heikki Naski

@HeikkiNaski, pelo menos para mim, eu preciso Enter depois do Ctrl-C também (para escapar do registro de expressão)
porges

40

Caso você precise sair do Vim no modo fácil (ao usar a -yopção), você pode entrar no modo normal do Vim pressionando Ctrl+ Le, em seguida, qualquer uma das opções normais de saída funcionará.


7
Outra opção: você pode usar Ctrl+Opara sair temporariamente do modo INSERT e entrar :q. O truque dessa combinação também é útil no vim normal para executar um único comando e retornar ao modo INSERT.
Andrey Starodubtsev

28

O Vim possui três modos de operação: modo de entrada, modo de comando e modo Ex.

Modo de entrada - tudo o que você digita, todas as teclas são repetidas na tela.

Modo de comando ou modo de escape - tudo o que você digita nesse modo é interpretado como um comando.

Modo Ex - este é outro editor, ex. É um editor de linha. Funciona por linha ou com base em um intervalo de linhas. Nesse modo, a :aparece na parte inferior da tela. Este é o ex-editor.

Para sair do Vim, você pode sair enquanto estiver no modo ex ou no modo de comando. Você não pode sair do Vim quando estiver no modo de entrada.

Saindo do modo ex

  1. Você precisa ter certeza de que está no modo de comando. Para fazer isso, basta pressionar a Esctecla

  2. Vá para o modo ex pressionando a :tecla

  3. Use qualquer uma das seguintes combinações no modo ex para sair:

    :q- sair :q!- sair sem salvar :wq- salvar e sair ou escrever e sair :wq!- o mesmo que wq, mas forçar a gravação caso as permissões do arquivo sejam somente leitura :x- escrever e sair :qa- saia de tudo. útil quando vários arquivos são abertos, como:vim abc.txt xyz.txt

Saindo do modo de comando

  1. Pressione a tecla Escape. Você provavelmente já fez isso se estiver no modo de comando.

  2. Capital ZZ ( shift zz) - salvar e sair

  3. Pressione capital ZQ ( shift zq) - saia sem salvar.


3
O que você está chamando de "ex mode" é na verdade chamado de modo de linha de comando . Ele permite que você insira comandos ex, mas com algumas diferenças importantes .
jpaugh

1
Hmm não. Você está esquecendo o modo visual.
Pryftan

26

Depois de pressionar ESC(ou cmd+ Cno meu computador), você deve pressionar :para que o prompt de comando apareça. Então, você pode entrar quit.

Você pode achar que a máquina não permitirá que você saia porque suas informações não foram salvas. Se você deseja encerrar de qualquer maneira, insira !diretamente após o encerramento (por exemplo :quit!).


19

Eu adquiri o Vim instalando um cliente Git no Windows. :qnão sairia do Vim por mim. :exitfez no entanto ...


1
Da mesma forma, para o vim fazer o git em um Macintosh, isso funcionou.
Joel

1
@ Joel acabou de verificar isso no meu mac, ambos os comandos são legítimos ( vim -version7.3).
precisa

2
Para Git Bashno windows, Vimàs vezes ESCnão está funcionando. use CTRL+ em [vez disso.
Val

@ Val Isso parece estranhamente familiar. Iirc é porque os dois fazem a mesma coisa. Como em ^[é o mesmo que ESC. É interessante que o Windows o torne mais complicado. E divertido.
Pryftan

10

A pergunta foi feita aqui .

O qcomando com um número fecha a divisão especificada nessa posição.

:q<split position>ou :<split position>qfechará a divisão nessa posição.

Digamos que o layout da janela do Vim seja o seguinte:

-------------------------------------------------
|               |               |               |
-------------------------------------------------
|               |               |               |
|               |               |               |
|    Split 1    |    Split 2    |     Split 3   |
|               |               |               |
-------------------------------------------------

Se você executar o q1comando, ele fechará a primeira divisão.q2fechará a segunda divisão e vice-versa.

A ordem da posição dividida no comando quit não importa. :2qou :q2fechará a segunda divisão.

Se a posição da divisão que você passar para o comando for maior que o número de divisões atuais, ela simplesmente fechará a última divisão.

Por exemplo, se você executar a q100configuração da janela acima, onde houver apenas três divisões, ela fechará a última divisão (Divisão 3).

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.