¿Por qué el modo de pegado entre paréntesis está habilitado esporádicamente en mi pantalla de terminal?

23

Uso Ubuntu 14.04 y tengo un problema extraño con la pantalla de mi terminal que me está molestando mucho. ¿Podría alguien ayudarme con eso o explicarme si estoy haciendo algo mal o no en Linux? Tengo algún tipo de solución, pero quiero entender por qué sucede esto una y otra vez.

A menudo copio los comandos bash de mis notas o de Internet y, a veces, obtengo extraños símbolos 0 ~ y 1 ~ que envuelven las cosas que copié. Es muy molesto y esto sucede de manera totalmente aleatoria.

Después de una larga búsqueda descubrí que esto se llama modo de pegado con frenos, así que ahora uso este comando printf "\e[?2004l"para arreglar mi terminal si este modo se habilita de repente.

¿Es posible desactivar esta función de forma permanente de alguna manera? Lo enfrenté en todas las máquinas Ubuntu que trabajo ahora. Anteriormente utilicé Ubuntu 10.10 y 12.04 y nunca antes había tenido ese problema.

artemdevel
fuente

Respuestas:

11

Puede deshabilitar el modo de pegado entre corchetes.

Para probarlo temporalmente, en bash:

bind 'set enable-bracketed-paste off'

Luego, si le gusta cómo se comporta eso, puede poner la configuración en su ~/.inputrc, o en todo el sistema en /etc/inputrc(o donde sea que esté en Ubuntu).

jwd
fuente
44
Todo lo que parece hacer por mí es hacerlo para que no pueda escribir la letra "p" (y solo una "p" minúscula), o pegarla como si nada, y nada más
Brian dice Reinstate Monica
@BrianLeishman Debido a la forma peculiar en que bindanaliza los argumentos que no reconoce, eso es lo que sucederá si ejecuta este comando usando Readline antes de la versión 7 o Bash antes de 4.4. Esta respuesta no hará nada útil hasta la próxima versión de Ubuntu (17.04).
Anthony G - justicia para Monica
El printfenfoque funciona, pero no funciona cuando se coloca en my .bashrc, y la función de alguna manera se activa periódicamente. El bindenfoque rompe mi teclado (la ptecla no funciona , and putting that line in my ~ / .inputrc` funciona, durante 10 segundos, y luego la consola comienza a vomitar para -enaset-enaset-...siempre después de 10 segundos de uso. Finalmente, simplemente actualicé manualmente a bash 4.4 desde la fuente para corregir el estúpido problema.
Nube
1
El comando correcto es bind 'set enable-bracketed-paste off'(con un espacio en lugar de la primera `-``. Parece que no es posible editar solo un carácter.
Flecha
7

Puedes poner ese comando en tu bashrc. Entonces se aplicaría cada vez que abra su terminal.

Simplemente escriba vi ~/.bashrcy agregue printf "\e[?2004l"al final y guarde el archivo con:wq

MOHRE
fuente
Sí, hice esto al principio en realidad :) más tarde simplemente deshabilité este modo como sugirió @jwd.
artemdevel
1
echo 'printf "\e[?2004l"' >> ~/.bashrchace lo mismo en una línea, y puedes verificarlo con tail -n1 ~/.bashrc. No hay necesidad de usar vi.
pzkpfw
6

Para responder a su pregunta original de por qué sucede esto, aquí hay un posible escenario:

  • La computadora de mi casa tenía una nueva versión de zsh que admitía pegado entre corchetes (llamémoslo shell A)
  • Me metí en una computadora con mi shell configurado en una versión anterior de bash, que no admite pegado entre corchetes (shell B)

El problema es que mi programa de terminal todavía cree que la pasta entre corchetes está habilitada cuando se pasa del shell A al shell B, por lo que sigue agregando los caracteres alrededor de su contenido pegado (los bits 0 ~ y 1 ~). Shell B no los admite, por lo que simplemente los pasa sin cambios. Tiene que decirle a su terminal que apague la pasta entre corchetes haciendo que su shell imprima una secuencia de escape especial, que es lo que printf "\e[?2004l"hace.

Hay algunas formas de resolver el problema:

  1. Si no le importa la pasta entre corchetes, desactívela en el shell A para que nunca esté habilitada en primer lugar (respuesta de @ jwd)

  2. Si desea seguir usando pasta entre corchetes en el shell A, pero deshabilitar en el shell B, agregue la secuencia de escape a su .bashrc(respuesta de @ MOHRE)

  3. Actualice el shell B para admitir pegado entre corchetes, de modo que interprete correctamente esos caracteres 0 ~ y 1 ~.

Nota al printfmargen : si está utilizando la pantalla GNU, debe ejecutar ese comando fuera de la pantalla. No parece funcionar mientras está adentro.

rjh
fuente
Gracias @rjh :) Pero nunca he usado zsh o he tenido un problema con ssh como lo describiste. Parece que algo estaba mal configurado en Ubuntu hace años.
artemdevel