En la terminal bajo la sesión GUI,Oo produce el carácter "/"

En la terminal bajo la sesión GUI,Oo produce el carácter "/"

Cuando se está en una sesión de inicio de sesión de la GUI de GNOME3 en Ubuntu 20.10, presionar ESC, O, oen rápida sucesión en una ventana de terminal produce un carácter '/' en lugar de ingresar esas pulsaciones de teclas. Esto es problemático cuando ejecuto Vim, donde a menudo quiero salir del modo Insertar y comenzar rápidamente una nueva línea de texto encima de la actual.

Otras secuencias de teclas que comienzan con ESC Ose comportan de manera similar: ESC O qproduce "1"; ... wun "7", etc. Muchos también funcionan como se esperaba.

La ventana de tiempo para ingresar estas claves y activar el efecto parece ser de aproximadamente 2 segundos en Vim y considerablemente más corta en la línea de comando.

Al iniciar sesión en la consola a través de CTRL ALT F6, no se observa este comportamiento.

Tampoco ocurre en otras aplicaciones como Chrome, Text Editor o GVim.

Ocurre tanto en Guake como en Terminal.

También observé el mismo comportamiento en una instalación WSL de Ubuntu en una máquina con Windows 10. No parece haber ningún elemento de configuración común entre los dos directorios de inicio que sea sospechoso.

No he comprobado el comportamiento en otros escritorios como LXDE o KDE.

He notado que este problema no ocurre en una sesión de terminal MacOS.

¿Es esta una característica de GNOME? ¿Hay alguna forma de desactivarlo o modificarlo?

Respuesta1

El problema está en el mapa de teclas de VTE, desdeeste cambio en 2014:

confirmar 598572b526568591ca91e3e0019412274edd9643
Autor: Egmont Koblinger[correo electrónico protegido]
Fecha: domingo 18 de mayo 13:36:01 2014 +0200

Mapa de teclas: use secuencias codificadas en lugar de terminfo

https://bugzilla.gnome.org/show_bug.cgi?id=728900#c5

El código fuente dice esto:

static const struct _vte_keymap_entry _vte_keymap_GDK_KP_Divide[] = {
        {cursor_all, keypad_default, 0, "/", 1},
        {cursor_all, keypad_app, VTE_NUMLOCK_MASK, "/", 1},
        {cursor_all, keypad_app, 0, _VTE_CAP_SS3 "o", -1},
        {cursor_all, keypad_all, 0, X_NULL, 0},
};

dóndeSS3resulta ser la EscapeOsecuencia. Algunas terminales (y posiblemente algunas versiones de gnome-terminal) permiten redefinir claves, pero en una revisión rápida de Ubuntu 20, solo veo la capacidad de asignar un enlace a una de lascomportamientoque el terminal reconoce:

preferencias de gnome-terminal

Si esa ruta no ayuda, hay otras terminales que se ejecutan en Ubuntu.

Respuesta2

TL;DR Verifique que sus opciones timeoutleny/o ttimeoutlenvim no sean demasiado altas.

Esto no es específico de Gnome. Tuve un problema similar hace un tiempo, solo que <Esc>O producía "2":

La macro “oend^[Ores^[” da como resultado una nueva línea “end2es”. ¿Cómo?

El terminal proporciona claves especiales (como F1o ->) para los programas que se ejecutan en él como secuencias de escape. Para que vim sepa si interpretar estas secuencias de escape o interpretar cada carácter por sí solo, utiliza un temporizador para determinar si el usuario probablemente las escribió o si el terminal proporcionó la secuencia como una traducción a una clave especial (lo cual debería ser mucho más más rápido de lo que uno podría escribir). Vim documenta esto en la opción esckeys:

'esckeys' 'ek'      boolean (Vim default: on, Vi default: off)
            global
    Function keys that start with an <Esc> are recognized in Insert
    mode.  When this option is off, the cursor and function keys cannot be
    used in Insert mode if they start with an <Esc>.  The advantage of
    this is that the single <Esc> is recognized immediately, instead of
    after one second.  Instead of resetting this option, you might want to
    try changing the values for 'timeoutlen' and 'ttimeoutlen'.  Note that
    when 'esckeys' is off, you can still map anything, but the cursor keys
    won't work by default.
    NOTE: This option is set to the Vi default value when 'compatible' is
    set and to the Vim default value when 'compatible' is reset.
    NOTE: when this option is off then the |modifyOtherKeys| functionality
    is disabled while in Insert mode to avoid ending Insert mode with any
    key that has a modifier.

Para ver este comportamiento en una configuración predeterminada de vim, debe escribir las 3 teclas en menos de una décima de segundo.

Dado que ve que su ventana de tiempo en vim es de 2 segundos, supongo que sus opciones timeoutleny/o ttimeoutlenvim son demasiado altas.

                        *'timeoutlen'* *'tm'*
'timeoutlen' 'tm'   number  (default 1000)
            global

                        *'ttimeoutlen'* *'ttm'*
'ttimeoutlen' 'ttm' number  (default -1, set to 100 in |defaults.vim|)
            global
    The time in milliseconds that is waited for a key code or mapped key
    sequence to complete.  Also used for CTRL-\ CTRL-N and CTRL-\ CTRL-G
    when part of a command has been typed.
    Normally only 'timeoutlen' is used and 'ttimeoutlen' is -1.  When a
    different timeout value for key codes is desired set 'ttimeoutlen' to
    a non-negative number.

        ttimeoutlen mapping delay      key code delay   ~
           < 0      'timeoutlen'       'timeoutlen'
          >= 0      'timeoutlen'       'ttimeoutlen'

    The timeout only happens when the 'timeout' and 'ttimeout' options
    tell so.  A useful setting would be >
        :set timeout timeoutlen=3000 ttimeoutlen=100
    (time out on mapping after three seconds, time out on key codes after
    a tenth of a second).

Ahora bien, /puede que no parezca una clave especial, pero aparentemente debe interpretarse de manera diferente a la que aparece al lado Shift. Mirando la página de manual urxvt(7), veo:

KP_Divide      /       ESC O o

KPProbablemente se refiere al teclado numérico.

información relacionada