Existe uma maneira de alias `: w'` a`: w`, para evitar a criação de arquivos com o nome '?


9

Ocasionalmente, meu mindinho roçará a 'tecla enquanto pressiona enter, resultando em :w'<Enter>.

Eu tentei:

cabbrev w' :w
cabbrev w\' :w
cabbrev "w'" :w

Nenhum deles funciona. Existe uma maneira de alias :w'para :w?

Eu também uso cmdwin ( :help cmdwin+ nnoremap : :<C-F>) em vez da linha de comando normal; portanto, pontos de bônus se funcionar lá também.


3
hah; Eu tenho o mesmo problema com o \
Martin Tournoij

Respostas:


8

Como Peter Rincker aponta, os cmaps também podem se expandir em outros lugares, então cnoreabbrevseria melhor :

cnoreabbrev w' w

Ou, o mais seguro, novamente graças a Peter:

cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"

Ao verificar explicitamente se a linha de comando contém apenas w', expansões indesejadas em situações podem ser evitadas.

Você pode usar um cmap:

cmap w' w

Você ainda teria que pressionar Enter, mas um acidente 'deve ser ignorado agora.

Se você estiver usando cmdwin, um inoremapconjunto de autocmdpode ser útil:

autocmd CmdwinEnter * inoremap w' w
autocmd CmdwinLeave * iunmap w'

Eu corri :cmap w' w, mas não houve mudança de comportamento. :w'ainda resulta na gravação em um arquivo chamado '. "'" [New] 0L, 0C written.
Mwcz

@mwcz Aparece 'realmente quando você pressiona depois w? Não deveria ter cmapsido criado com êxito - um LHS de cmap é preenchido automaticamente com o RHS; portanto, se você pressionar a ', ele ainda será exibido w.
19715 muru

11
Tenha cuidado com os nus cmape cabbrevos. Eles irão executar / expandir em outros modos e outros lugares. por exemplo, :s/'follow'/fooe /'follow'. Consulte o seguinte alteração vim: função de x para excluir tampão em vez de salvar e sair ou utilização cmdalias.vim
Peter Rincker

11
Melhor prevenir do que remediar:cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
Peter Rincker

Sim, 'ainda aparece, mas eu descobri que é porque estou usando o cmdwin para digitar comandos, e o cmdwin é apenas um buffer comum, portanto cmap/cnoreabbrev, não trabalhe lá. Atualizando a resposta com a noreabbrevopção para usuários do cmdwin. :) Obrigado!!!
Mwcz

0

Este método funciona para mim:

:ca w' w

Como alternativa, você pode configurar o seu vim para salvar o buffer atual ao pressionar Esc duas vezes, por exemplo

:map <Esc><Esc> :w<CR>

Ou use o seguinte mapeamento para salvar o arquivo com Ctrl+ sou F2:

nmap <c-s> :w<CR>
vmap <c-s> <Esc><c-s>gv
imap <c-s> <Esc><c-s>

nmap <F2> :update<CR>
vmap <F2> <Esc><F2>gv
imap <F2> <c-o><F2>

Nota: F2 salva apenas se necessário e retorna o usuário ao modo de inserção (ou restaura sua seleção visual), conforme necessário.

Fonte: Salvando um arquivo no vim wikia

Ou use as seguintes alternativas:

  • :up( :update) para:w
  • ZQ para :q
  • ZZpara :wqou:x

Observe as aspas na pergunta. :w'não :w. Eu quero usar :wsem bater acidentalmente ', que grava um arquivo que devo então rm \'. Boas dicas, no entanto.
mwcz

11
Ctrl-S não envia um sigstop - se o programa parar, é provavelmente porque um buffer estava cheio. Veja unix.stackexchange.com/questions/13629/… '
muru
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.