A menudo uso ctrl+cpara copiar texto de alguna aplicación de interfaz gráfica de usuario y luego pegarlo en mi emulador de terminal (terminador), usando el botón derecho del mouse y pegar. A veces olvido que el portapapeles contiene varias líneas, que cuando se pega en bash hace que cada línea se "ejecute"
¿Hay alguna solución para evitar la pasta de varias líneas por completo?
bash
command-line
x11
clipboard
terminal-emulator
Martin Vegter
fuente
fuente
sleep 999999
luego pega si se ve bien. el comando de suspensión no lee las líneas y se descartan cuando presionactrl+c
.bash
tendrá soporte para pegado entre paréntesis ,zsh
ya tiene un complemento de terceros .printf '\e[?2004h'
en la mayoría de los emuladores de terminal similares a xterm, se habilita un modo de pegado entre corchetes donde el terminal pone entre corchetes el texto pegado para que las aplicaciones puedan detectar dónde comienza y dónde termina el pegado. xterm también admite otro modo\e[?2005h
en el que todos los caracteres pegados tienen el prefijo^V
(entendido por muchas aplicaciones y la disciplina de línea tty comolitteral-next
).Respuestas:
Esta respuesta no es la más específica para la pregunta del usuario. Vea mi segunda respuesta. Dejo esto aquí porque aborda el problema más general .
Por los comentarios a su puesto original, es necesario (1) un emulador de terminal que soporta corchetes pegar y (2) correspondiente soporte para lo que se está ejecutando en el terminal, es decir,
vim
,bash
,zsh
. Emuladores de terminal que admiten pegado entre corchetes (la lista se actualizará en función de los comentarios a esta publicación):xterm
- ya que ??gnome-terminal
- ya que ??putty
- desde 0.63 (fecha de lanzamiento 2013-08-06)Aplicaciones que admiten el modo entre corchetes:
vim
zsh
Para
bash
, StéphaneChazelas ha creado un script de shell para facilitar la detección de ese modo y tomar las medidas adecuadas.Una respuesta más específica, evitar que las líneas se corten, no tiene respuesta sin conocer el programa de Unix que se está ejecutando cuando presiona pegar.
Un administrador de portapapeles tal vez lo que necesita.
fuente
^V
comoliteral-next
. Pero, ¿cómo^V
entra en el flujo de entrada de la aplicación?bash
lo verá el mensaje de readline (y lo tratará como el siguiente literal)). Si está en modo icanon, la disciplina de línea de ese dispositivo tty interno lo despojará (siempre que ellnext
carácter lo sea^V
), al igual que cuando escribe Ctrl-V X manualmente ..^V
menos que use elquoted paste
modo xterm (habilitado mediante el envío\e[?2005h
). Esaperl
secuencia de comandos podría adaptarse para que elimine todo excepto la primera línea en una pasta de varias líneas (aunque no de manera confiable para pastas grandes), pero como ya es, ya que cita la nueva línea para readline (como si hubiera presionado Ctrl- V Ctrl-J), evita que las líneas se ejecuten (solo se agregan al búfer de edición y aún debe presionar Enter para ejecutarlas).