Saia do vim mais rapidamente

124

Eu uso o Vim principalmente para edições rápidas, em vez de longas sessões de trabalho. Nesse sentido, acho que a seqüência de teclado para desistir especialmente trabalhoso: Esc, Shift+ ;, w, q, Enter.

Como sair do Vim (possivelmente salvando o documento) com o menor número de teclas pressionadas? Especialmente no modo Inserir.

vemv
fonte
50
O botão liga / desliga está a apenas um clique de distância, você sabe.
Renan
2
@jasonwryan está certo - o ZZ é bem rápido se você estiver no modo de comando, mas a comparação não está certa. Sua sequência de teclas assume que você está no módulo de inserção. Para sair do modo de inserção, Ctrl- [é mais rápido que Esc. Shift-: é um toque de tecla - você não pode digitar: mais rápido por conta própria. Então você economiza alguns, mas não muito.
Dominic Cronin
2
Você não deve estar usando Escpara sair do modo de inserção, pois a Esctecla está longe das outras nos teclados modernos. Use Ctrl+ ]ou crie seu próprio mapeamento.
vazio-pointer
3
Adquira um teclado francês - você pode eliminar a mudança.
Rich
1
ponteiro de vazio, Ctrl + C não funciona em vez de Ctrl + [como um substituto para Esc?
Zumalifeguard

Respostas:

154

Shiftzz no modo de comando salva o arquivo e sai.

jasonwryan
fonte
4
Isso absolutamente precisa de mudança ou é simplesmente Z Z(maiúscula)? Além disso, você não precisa estar no modo de comando para que funcione, o que faria isso Esc Z Z?
um CVn em
35
Além disso, ESC Z Qpara sair sem salvar
Carlos Campderrós
Strg + zz está errado. Ele vai enviar o processo vim para fundo
hek2mgl
2
@ MichaelKjörling: O ZZ só precisa ser maiúsculo.
LarsH # 1/13
2
Isso fecha apenas um arquivo. Eu tenho muitas abas abertas, o que levaria toneladas de Zs.
Philip
41

ZZno modo normal, salva o arquivo atual se modificado e sai ou fecha a janela / guia atual (o mesmo que :xmas não o :wqque grava o arquivo, mesmo que não tenha sido modificado).

Para sair incondicionalmente após ter gravado todos os arquivos modificados em todas as janelas, guias e buffers ocultos, é necessário :xa(ele ainda não será encerrado se alguns arquivos não puderem ser gravados por um motivo ou outro)

Para sair incondicionalmente sem alterar nada: ZQ(o mesmo que :q!).

Stéphane Chazelas
fonte
1
Eu acho que você quer dizer modo normal. "modo de comando" poderia facilmente ser confundido com o modo de linha de comando
David Brown
@ DavidBrown, command modeé o nome tradicional, mas concordo que normal modeé menos ambíguo. Eu alterei a resposta.
Stéphane Chazelas
33

:x é uma chave menor que :wq

Tomasz Myrta
fonte
11
Não é tão bom como Shift + Z Zse!
CodeMedic
@ CodeMedic É de longe o mais rápido se você tiver nno : ;e nno ; :, no entanto. (mais vno o mesmo). Eu duvidei da troca, mas você nunca mais voltará. :nno ,: :silent! unmap :<CR>:silent! unmap ;<CR>e :nno ,; :nno ; :<CR>:nno : ;<CR>:vno ; :<CR>:vno : ;<CR>apoiar o impar yap@"e tal.
jthill
20

Crie um mapeamento personalizado para tarefas usadas com frequência. Se você sair frequentemente do vim, crie um mapeamento com poucas teclas, por exemplo

nnoremap <leader><leader> :xa<cr>

Se a opção <leader>estiver definida como vírgula, let mapleader = ","pressione a tecla vírgula duas vezes para abrir o vim e salvar suas alterações. Se você deseja salvar mais um toque de tecla quando estiver no modo de inserção, crie também um mapeamento de modo de inserção correspondente:

inoremap <leader><leader> <esc>:xa<cr>

Mas cuidado, isso pode acontecer acidentalmente quando você bate <leaderduas vezes.

Marco
fonte
1
Obrigado por uma resposta completa, ele me incentiva a aprender mais sobre o vim (o que costumo evitar)!
Vemv1
4
@vemv, você deve trabalhar ao contrário - sempre que precisar fazer a mesma coisa mais de uma vez, veja se há uma maneira de impedir isso!
Wayne Werner
17

Use isso para fazer a mágica. Apenas duas teclas!

Ctrl+ spara salvar,

ctrl+ dpara salvar e sair,

ctrl+ qpara sair do descarte de alterações.

1º. Coloque isso no seu ~ / .bashrc

bind -r '\C-s'
stty -ixon

2nd. Coloque isso no seu ~ / .vimrc

inoremap <C-s> <esc>:w<cr>                 " save files
nnoremap <C-s> :w<cr>
inoremap <C-d> <esc>:wq!<cr>               " save and exit
nnoremap <C-d> :wq!<cr>
inoremap <C-q> <esc>:qa!<cr>               " quit discarding changes
nnoremap <C-q> :qa!<cr>

3rd. Reinicie o vim e obtenha dias mais produtivos!

Brain90
fonte
2
Por que usar CTRL + D / CTRL + Q para salvar + sair e não apenas ZZ e ZQ?
Evan Carroll
Oi Evan, ctrl + d / ctrl + q só precisa de duas teclas, enquanto ZZ e ZQ precisam de três teclas. shift + z + z / shift + q + q. As chaves de salvamento são significativas se fizermos isso com frequência. Além disso, aumentamos com ctrl + s para salvar atalhos, acho mais intuitivo do que ZZ ou ZQ.
precisa saber é o seguinte
4
Eu sempre considerei o ZQ perigoso. Você pode clicar no ZQ para não salvar, mas se você pressionar o Z acidentalmente duas vezes, salvou seu arquivo sem querer.
Keith Devens
1
se você estiver em um mac, use ~ / .bash_profile. E lembre-se de adquiri-lo.
Snowcrash
16

Que tal apenas Qpara 'Quit'?

Isso exigirá apenas um toque de tecla deslocado (ou seja, Shifte Q). É também uma combinação de teclas que raramente acerto por acidente.

Por padrão, o vim mapeia Q para switch to "Ex" mode. Se você achar o modo "Ex" tão inútil (ou irritante) quanto eu, não perderá a função padrão.

Aqui está o que eu tenho no meu .vimrcarquivo:

" allow quit via single keypress (Q)
map Q :qa<CR>

Se você tiver buffers não salvos, ele será solicitado antes de sair.

Lambart
fonte
de alguma forma no meu VIM Q já estava mapeado para :qpor padrão. Obrigado pela dica.
user13107
7

Aqui está uma folha de dicas para o VIM

Cheat-sheet-for-VIM

To quit the vi editor without saving any changes you've made:

If you are currently in insert or append mode, press Esc. 

Press  :  (colon). The cursor should reappear at the lower left corner of the screen beside a colon prompt. 

Enter the following:
  q!
This will quit the editor, and all changes you have made to the document will be lost.

Um pouco mais ::

Fechando e salvando arquivos

When you edit a file in vi, you are actually editing a copy of the file rather than the original. The following sections describe methods you might use when closing a file, quitting vi, or both.
Quitting and Saving a File

The command ZZ (notice that it is in uppercase) will allow you to quit vi and save the edits made to a file. You will then return to a Unix prompt. Note that you can also use the following commands:

:w  to save your file but not quit vi (this is good to do periodically in
    case of machine crash!).
:q  to quit if you haven't made any edits.
:wq to quit and save edits (basically the same as ZZ).
Quitting without Saving Edits

Sometimes, when you create a mess (when you first start using vi this is easy to do!) you may wish to erase all edits made to the file and either start over or quit. To do this, you can choose from the following two commands:

:e! reads the original file back in so that you can start over.
:q! wipes out all edits and allows you to exit from vi.
vkulkarni
fonte
Os dois últimos devem adicionar "desde a última vez que o arquivo foi salvo" ... é "óbvio", mas um iniciante pode entender "ótimo, desde que eu abri o vi" e descobrir que não, se eles salvaram durante a sessão ": q! " não recuperará o arquivo original e ": e!". Ele descartará apenas as modificações ocorridas desde a última vez em que o arquivo foi aberto ou salvo (o que for mais recente).
Olivier Dulac
3

Minha solução simples e conveniente para sair e salvar do vim - é:

Ctrl+ Xatalho.

Basta adicionar este código ao .vimrcarquivo:

"Fast quit and save from normal and insert mode
:map <C-X> <ESC>:x<CR>
:imap <C-X> <ESC>:x<CR>
skywinder
fonte
1
Bom, mas por que <C-Q>não é mapeável?
Friederbluemle
2

Experimentar

nno : ;
nno ; :
vno : ;
vno ; :

Se você usar o fFtT, isso levará algum tempo para se acostumar, mas agora sair é apenas ;xpara salvar, se necessário, ;qpara não salvar. Além disso, tudo o mais fica mais rápido também.

jthill
fonte