¿Puedo usar el mouse para seleccionar correctamente el texto en menos?

9

Acabo de descubrir que puedo agregar las siguientes líneas a ~/.vimrc.

set mouse=a
:vmap <C-C> "+y

Esto tiene el efecto de poder seleccionar texto con el mouse (es decir, en modo visual) y luego copiar el texto real al portapapeles X con Ctrl+ c. Esto difiere de la copia predeterminada del terminal, ya que es el texto real que estoy copiando, no lo que ve el terminal. Por ejemplo, si hubiera pestañas en el texto, anteriormente las copiaría como espacios.

¿Hay alguna manera de hacer que menos se comporten de la misma manera? es decir, ¿puedo copiar textualmente lo que hay en el archivo de texto que estoy viendo en menos?

Gavilán
fuente
¿Has probado con gpm?
YoMismo
@YoMismo No. No estoy realmente seguro de cómo eso ayudaría, ya que el emulador de terminal aún contendría espacios literales en lugar de pestañas, en el ejemplo anterior.
Sparhawk
Lo siento, pensé que estabas trabajando en la consola, no en un terminal X: - /
YoMismo

Respuestas:

5

No es una tarea por menos

No,
no creo que pueda hacerlo directamente, porque menos no tiene un cursor para empezar.
Necesitaría uno para navegar al inicio y al final del texto para seleccionar.
lesssimplemente no es la herramienta adecuada para la navegación a nivel de personaje.

Pestañas ya expandidas

Puede usar la tecla shifty el mouse para hacer una selección; Esto lo maneja el terminal, no menos. Pero el terminal no sabe cómo se organizaron los espacios y las pestañas, menos la interpretación de las pestañas internamente, y escribe " " caracteres normales en la pantalla.

Hay herramientas como screen, tmux y byobu, que pueden hacer muchas cosas impresionantes en esta área. No lo comprobé, pero supongo que estos multiplexores de terminales no tienen una forma de evitar eso, al final son terminales, y se comportarán igual.

Usar vim

Si usted está mostrando un archivo en less, hay una buena solución:
Pulse la tecla vde lessabrir el archivo actual en vim- Asumiendo su $EDITORetc. está configurado para vim.

Esto no funciona cuando se muestra la entrada estándar de una canalización más o menos, aunque existen soluciones alternativas .

Desplazamiento del mouse, al menos

Pero al menos puede desplazarse con la rueda del mouse:

Parece que incluso está habilitado de forma predeterminada, pero los eventos de la rueda del mouse se suprimen por una opción diferente.

Para una prueba rápida, intente:

LESS=-r man less

La opción -X( --no-init) bloquea el desplazamiento: verifique qué LESScontiene su variable de entorno :

$ echo $LESS

La opción -q( --quiet, --silent) también causa problemas, según SU: ¿Cómo hacer que la rueda del mouse se desplace con menos buscapersonas usando bash y gnome-terminal?

Volker Siegel
fuente
Gran respuesta. ¡La vllave es fantástica! (Me he tomado la libertad de una solución alternativa para que funcione también en canalizaciones). FWIW en mi emulador de terminal (terminador) No tengo que mantener presionada la tecla Mayús cuando selecciono texto.
Sparhawk
@Sparhawk ¡Hola, la solución es al menos igual de fantástica!
Volker Siegel
2
Además, hay un localizador llamado vimpagerque puede usar para reemplazar lessla venta completa. En realidad, solo se utiliza vimenvuelto en un pequeño script.
HalosGhost
1
@HalosGhost Gracias por eso. vimpagerse ve muy bien, pero tuve problemas con los tirones que me hacen preferir usar menos y v.
Sparhawk
@Sparhawk Técnicamente, puede comparar el vimrc utilizado o usar partes de su vimrc normal vimpagerhasta que funcione; (Intento no activar todos mis vimcomplementos al comenzar vimpager...)
Volker Siegel
3

Puede copiar la línea superior que se muestra en lessla selección X11 CLIPBOARD escribiendo con less:

|.head -n1|xclip -sel c<Enter><Enter>

Eso canaliza la menor cantidad de búfer desde la línea superior a la .marca (en efecto, todo el contenido de la pantalla) al head -n1|xclip -sel ccomando (para almacenar la primera línea en la selección CLIPBOARD)

Puede configurar su emulador de terminal para pegar esa cadena al presionar una tecla determinada, o vincular eso a una tecla o combinación de lessteclas en las asociaciones de teclas. Por ejemplo, para vincularlo Alt+C:

printf '%s\n' '#commands' '\ec pipe .head -n1|xclip -sel c\n' | lesskey -

Sin embargo, tenga en cuenta que deberá presionar Enterdespués para reconocer el mensaje "| done (presione RETURN)".

Con xterm, también podría definir un nuevo modo de selección, por ejemplo, aquí al mantener presionado Ctrl+Altal extender la selección que indica lessqué líneas copiar de su pantalla actual:

Escribe un lesspasteguión como:

#! /bin/sh -
start=${1%%";"*}
end=${1#*" "}
end=${end%";"*}
head -n "$((end))" | tail -n "$((end - start + 1))" | xclip -sel c

Y defina las tablas de traducción xterm (aquí en la línea de comandos para la prueba, pero querrá agregarlo a un archivo de recursos X):

xterm -xrm 'XTerm.VT100.translations: #override \
  Meta Ctrl<Btn1Down>: select-start()\n\
  Meta Ctrl<Btn1Motion>: select-extend()\n\
  Meta Ctrl<Btn1Up>: select-end(SECONDARY) \
    insert-formatted("|.lesspaste '\''%P %p'\''\n\n", SECONDARY)'

Luego marcaría las líneas para pegar arrastrando el mouse con presionado Ctrl+Alt, y al soltar el Botón 1, xterm le indicaría menos que canalice la pantalla actual a nuestro lesspastescript con las coordenadas de inicio y fin pasadas como un argumento ( y1;x1 y2;x2).

(Tenga en cuenta que puede que no funcione correctamente si lessse invoca con -sexprimir líneas en blanco (como es típico cuando se invoca por man), como la entrada que se alimenta a lesspastele no han sus líneas en blanco exprimido (por lo que los desplazamientos número de línea puede ser malo)) .

Stéphane Chazelas
fuente
@Sparhawk, ver edición.
Stéphane Chazelas
No parece funcionar para mí. Nada nuevo está en el portapapeles. ¿Se lesssupone que debe dar algún tipo de retroalimentación? jNo parece hacer nada por mí.
Sparhawk
@Sparhawk, ¿tiene alguna atajos de teclado personalizados para less, jse desplaza hacia abajo por una línea ( forw-line) en la clave de enlace predeterminado (en realidad J( forw-line-force) sería mejor aquí, voy a editar). |debería darle algunos comentarios. (solicite la marca y luego el comando para ingresar).
Stéphane Chazelas
No, no lo hice, pero estaba probando con texto de menos de una página, así que quizás por eso jno hice nada. La primera opción ahora funciona (+1). La segunda opción parece bastante complicada con algunas advertencias, por lo que no la probé. Creo que ves lo suficientemente bueno para mí.
Sparhawk