Могу ли я использовать мышь, чтобы правильно выбрать текст меньше?

9

Я только что обнаружил, что могу добавить следующие строки ~/.vimrc.

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

Это дает возможность выделять текст с помощью мыши (то есть в визуальном режиме), а затем копировать фактический текст в буфер обмена X с помощью Ctrl+ c. Это отличается от копии по умолчанию с терминала, поскольку я копирую настоящий текст, а не то, что видит терминал. Например, если в тексте есть вкладки, то раньше я копировал их как пробелы.

Есть ли способ заставить меньше вести себя так же? то есть я могу скопировать дословно то, что находится в текстовом файле, который я просматриваю меньше?

Sparhawk
источник
Вы пробовали с gpm?
YoMismo
@ YoMismo Нет. Я не совсем уверен, как это могло бы помочь, так как эмулятор терминала по-прежнему будет содержать буквенные пробелы вместо вкладок, в приведенном выше примере.
Sparhawk
Извините, я думал, что вы работаете в консоли, а не в терминале X: - /
YoMismo

Ответы:

5

Не задача для меньших

Нет,
я не думаю, что вы можете сделать это напрямую, потому что у less нет курсора для начала.
Нужно было бы перейти к началу и концу текста для выбора.
lessпросто не правильный инструмент для навигации на уровне персонажа.

Вкладки уже развернуты

Вы можете использовать клавишу shiftи мышь, чтобы сделать выбор; Это обрабатывается терминалом, а не меньшим. Но терминал не знает, как расположены пробелы и вкладки, - меньше интерпретирует вкладки внутри и записывает только нормальные " " символы на экран.

Есть такие инструменты, как screen, tmux и byobu, которые могут сделать много впечатляющих вещей в этой области. Я не проверял, но я предполагаю, что эти терминальные мультиплексоры не могут обойти это - будучи терминалами, в конце концов - и будут вести себя одинаково.

Используйте Vim

Если вы показываете файл less, есть хорошее решение:
Нажмите клавишу vв , lessчтобы открыть текущий файл в vim- asuming ваши и $EDITORт.д. настроена на vim.

Это не работает при показе stdin из конвейера или около того, хотя есть обходные пути .

Прокрутка мышью, по крайней мере

Но вы можете хотя бы прокрутить колесо мыши:

Похоже, это даже включено по умолчанию, но события колесика мыши подавляются другой опцией.

Для быстрого теста попробуйте:

LESS=-r man less

Опция -X( --no-init) блокирует прокрутку - проверьте, что LESSсодержит ваша переменная окружения :

$ echo $LESS

Опция -q( --quiet, --silent) также вызывает проблемы, в соответствии с SU: как сделать так, чтобы колесо мыши прокручивало меньше пейджеров, используя bash и gnome-терминал?

Volker Siegel
источник
Отличный ответ. vКлюч является фантастическим! (Я взял на себя смелый обходной путь, чтобы он работал и в конвейерах.) FWIW в моем терминальном эмуляторе (терминаторе) Мне не нужно удерживать shift, когда я выбираю текст.
Sparhawk
@ Sparhawk Эй, обходной путь, по крайней мере, так же фантастичен!
Фолькер Сигел
2
Кроме того, существует пейджер, vimpagerкоторый вы можете использовать для lessполной продажи. На самом деле он использует только vimзавернутый в небольшой скрипт.
HalosGhost
1
@HalosGhost Спасибо за это. vimpagerвыглядит довольно круто, но у меня были проблемы с рывками , из-за которых я предпочитаю использовать меньше и v.
Sparhawk
@Sparhawk Технически, вы можете сравнить используемый vimrc или использовать части вашего обычного vimrc, vimpagerпока он не заработает; (Я стараюсь не активировать все мои vimплагины при запуске vimpager...)
Volker Siegel
3

Вы можете скопировать верхнюю строку, отображаемую в lessвыделенную панель X11, набрав less:

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

Это направляет меньший буфер от верхней строки к .метке (таким образом, фактически весь контент экрана) к head -n1|xclip -sel cкоманде (чтобы сохранить первую строку этого в выборе CLIPBOARD)

Вы можете настроить свой эмулятор терминала так, чтобы он вставлял эту строку при нажатии клавиши или связывал ее с клавишей или комбинацией lessклавиш в привязках клавиш. Например, чтобы связать это с Alt+C:

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

Однако обратите внимание, что Enterпосле этого вы нажмете , чтобы подтвердить приглашение «| done (нажмите RETURN)».

С помощью xterm, вы также можете определить новый режим выделения, например, здесь, удерживая Ctrl+Altпри расширении выделения, которое сообщает, lessкакие строки копировать с его текущего экрана:

Напишите lesspasteскрипт как:

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

И определите таблицы перевода xterm (здесь, в командной строке для тестирования, но вы захотите добавить это в файл ресурсов 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)'

Затем вы пометите строки для вставки, перетаскивая мышь с Ctrl+Altудержанным, и после отпускания кнопки 1, xterm скажет меньше, чтобы передать текущий экран нашему lesspasteскрипту с начальными и конечными координатами, переданными в качестве одного аргумента ( y1;x1 y2;x2).

(обратите внимание, что он может не работать должным образом, если lessвызывается с помощью -sсжатия пустых строк (как это обычно происходит при вызове man), поскольку вход, на который подается подача lesspaste, не будет сжимать пустые строки (поэтому смещения номеров строк могут быть неправильными)) ,

Стефан Шазелас
источник
@ Sparhawk, см. Редактировать.
Стефан Шазелас
Кажется, это не работает для меня. Ничего нового в буфере обмена нет. Является ли lessдолжна дать какой - либо обратной связи? jкажется, ничего не делает для меня.
Sparhawk
@Sparhawk, у вас есть какие-либо пользовательские привязки клавиш less, jпрокрутка вниз на одну строку ( forw-line) в привязке клавиш по умолчанию (на самом деле J( forw-line-forceздесь будет лучше, я отредактирую). |должен дать вам обратную связь. (запрос на отметку, а затем команду для ввода).
Стефан Шазелас
Нет, я этого не делал, но я тестировал текст длиной менее одной страницы, поэтому, возможно, именно поэтому jничего не сделал. Первый вариант теперь работает (+1). Второй вариант кажется довольно сложным с несколькими оговорками, поэтому я не пробовал. Я думаю, что vэто достаточно хорошо для меня.
Sparhawk