Salir del modo de inserción de bloque con Ctrl-C


8

En vim, si está en modo de inserción de bloque ( Ctrl-V, Shift-I) y sale usando Ctrl-C(en lugar de Esc), cancela la edición de bloque (y solo edita la primera fila).

¿Por qué es esto? En casi todos los demás contextos, Ctrl-Cy Escson sinónimos. (E idealmente hay una manera de arreglar esto, ahora me he acostumbrado a hacerlo Ctrl-Cy sería una pena si tuviera que volver a aprender ...)

Respuestas:


9

Ctrl-cy Escno se garantiza que sean sinónimos, y a menudo difieren. Por ejemplo, en el modo Insertar , Escactivará abreviaturas y pasará al modo Normal , mientras Ctrl-cque no activará abreviaturas ni el InsertLeavecomando automático y pasará directamente al modo Normal . Otro ejemplo es en el antiguo vimodo de línea de comando, en Escrealidad ejecutaría el comando como si hubiera golpeado Enter. Vim deliberadamente cambió esto porque ese comportamiento se consideró poco intuitivo y sorprendente, pero todavía se puede activar mediante la adición xa 'cpoptions'.

En cuanto a los operadores visuales en bloque, la blockwise-operatorsetiqueta de ayuda tiene la siguiente documentación:

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.

Tenga en cuenta que solo Escse menciona, no Ctrl-c.

Entonces, no, Ctrl-cy Escno son equivalentes. Nunca es una lástima desengañarse de un concepto erróneo. Una vez que se haya dado cuenta de eso, puede decidir qué hacer a continuación. Las opciones inmediatamente obvias son aprender las diferencias y usar la clave correcta, o decidir que no necesita la funcionalidad de una de las claves y reasignarla para que coincida con la otra.


44
Gotcha Por ahora lo haré vnoremap <C-c> <Esc>pero tendré en cuenta lo que dijiste.
Sophie Alpert

@BenAlpert: en realidad necesita nnoremap un inoremap con los mismos valores para cambiar completamente a ctrl-c como Esc. Lo he estado usando así durante años y funciona perfectamente para mí. Es una pena que otras variantes de vi, como vile o nvi, no permitan esta solución, por lo que me estoy perdiendo la funcionalidad abbr allí.
Alex

0

Intente :map ^C escdonde se ingresa "^ C" mediante CTRL+ vluego CTRL+ c.


¿Puedes explicar por qué esto es necesario? ¿Qué otros efectos secundarios podría tener?
Sophie Alpert

Cumplen funciones ligeramente diferentes. CTRL + C convencionalmente significa "cancelar esta acción" (en un contexto tipo Unix). Cancelar la acción en su contexto vim significa "detener lo que está sucediendo y volver al modo normal". Escapar en vim significa "He terminado de volver al modo normal".
donothings exitosamente

En cuanto a los efectos secundarios, no noté ninguno. CTRL-C después :!cattodavía parece tener el efecto deseado después del mapa. Si encuentra problemas, puede intentarlo, por ejemplo, stty intr \^ken el indicador de comandos de shell para cambiar el carácter de interrupción del terminal a CTRL-k.
donothings exitosamente
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.