Saindo do modo de inserção de bloco com Ctrl-C

8

No vim, se você estiver no modo de inserção de bloco ( Ctrl-V, Shift-I) e sair usando Ctrl-C(em vez de Esc), ele cancela a edição do bloco (e edita apenas a primeira linha).

Por que é isso? Em quase todos os outros contextos, Ctrl-Ce Escsão sinônimos. (E, idealmente, há uma maneira de corrigir isso - agora me acostumei a fazer Ctrl-Ce seria uma pena se eu tivesse que reaprender ...)

Sophie Alpert
fonte

Respostas:

9

Ctrl-ce Escnão é garantido que sejam sinônimos, e muitas vezes diferem. Por exemplo, no modo Inserir , Escacionará abreviações e passará para o modo Normal , enquanto Ctrl-cnão acionará abreviações nem o InsertLeavecomando automático e passará diretamente para o modo Normal . Outro exemplo é o antigo vimodo de linha de comando, Escque na verdade executaria o comando como se você tivesse atingido Enter. O Vim deliberadamente mudou isso porque esse comportamento foi considerado não intuitivo e surpreendente, mas você ainda pode ativá-lo adicionando xa 'cpoptions'.

Quanto aos operadores visuais em blocos, a blockwise-operatorsetiqueta de ajuda possui a seguinte documentação:

Visual-block Insert                     *v_b_I*
With a blockwise selection, I{string}<ESC> will insert {string} at the start
of block on every line of the block, provided that the line extends into the
block.  Thus lines that are short will remain unmodified.  TABs are split to
retain visual columns.

Observe que apenas Escé mencionado, não Ctrl-c.

Então, não, Ctrl-ce Escnão são equivalentes. Nunca é uma pena desiludir-se de um equívoco. Depois de perceber isso, você pode decidir o que fazer a seguir. As opções imediatamente óbvias são aprender as diferenças e usar a chave correta ou decidir que você não precisa da funcionalidade de uma das chaves e remapear para corresponder à outra.

jw013
fonte
4
Peguei vocês. Por enquanto eu vou, vnoremap <C-c> <Esc>mas vou manter o que você disse em mente.
Sophie Alpert
@ BenAlpert: você realmente não precisa mapear um inoremap com os mesmos valores para mudar completamente para ctrl-c como Esc. Eu tenho usado assim há anos e funciona perfeitamente para mim. É uma pena que outras variantes do vi, como vile ou nvi, não permitam essa solução alternativa, por isso estou perdendo a funcionalidade abbr lá.
Alex
0

Tente :map ^C esconde "^ C" é inserido via CTRL+ ve CTRL+ c.

donutingsuccessfully
fonte
Você pode explicar por que isso é necessário? Que outros efeitos colaterais podem ter?
Sophie Alpert
Eles servem funções ligeiramente diferentes. CTRL + C convencionalmente significa "cancelar esta ação" (em um contexto unix). Cancelar a ação no seu contexto vim significa "parar o que está acontecendo e voltar ao modo normal". Escape in vim significa "Eu terminei de voltar ao modo normal".
precisa saber é o seguinte
Quanto aos efeitos colaterais, não notei nenhum. CTRL-C depois :!catainda parece ter o efeito desejado após o mapa. Se você encontrar problemas, poderá tentar, por exemplo, stty intr \^kno prompt do shell, alterar o caractere de interrupção do terminal para CTRL-k.
precisa saber é o seguinte