четверг, 23 февраля 2017 г.

Multiple copy/paste buffers в GNU Screen

[Дополнено через полгода использования] Давно была потребность в нескольких буферах обмена между открытыми консольными сессиями. Труднонабираемые пароли, которые нужно повторить в нескольких консолях в разных последовательностях, длинные пути и тп.  Использую GNU Screen.  Без лишних предисловий, решение, из которого всё понятно:

#cat ~/.screenrc 

hardstatus on
hardstatus alwayslastline
hardstatus string "%w%=%m/%d %c"
bind -c pastdemo1 0 paste 0  
bind -c pastdemo1 1 paste 1  
bind -c pastdemo1 2 paste 2  
bind -c pastdemo1 3 paste 3
bind -c pastdemo1 4 paste 4
bind -c pastdemo1 5 paste 5
bindkey "^V" command -c pastdemo1
bind -c copydemo1 0 readreg 0  
bind -c copydemo1 1 readreg 1  
bind -c copydemo1 2 readreg 2  
bind -c copydemo1 3 readreg 3
bind -c copydemo1 4 readreg 4
bind -c copydemo1 5 readreg 5
bindkey "^C" command -c copydemo1

В результате по нажатию
     ctrl v 1
в активную сессию пишется первый буфер, по ctrl v 2 второй.  Таким образом настроены регистры обмена 0, 1, 2, 3, 4, 5. Получилось некое подобие именованных буферов ViM. что ещё надо для счастья? Риторический вопрос. Конечно же копирование в регистры обмена надо организовать попроще. В этом конфиге копируется стандартный буфер скрина, т.е. чтобы заполнить буфер №2 надо  заполнить обычный буфер, то есть выполнить
       ctrl A ctrl [
далее выбрать на терминале текст, что необходимо скопировать. Потом только копировать текст из обычного буфера в регистр №2 нажатием клавиш
        ctrl c 2
 Было бы удобнее, если бы по ctrl c 2 открывался режим копирования, как в стандартный буфер. Ещё хорошо бы если этот биндинг задавался проще - через что-то вроде bind -c copydemo1 * readreg *.  Но и это решение достаточно просто.
Ещё так подумал, для true vim way надо использовать не с/v клавиши, а y/p.




Дополнение: на самом деле ctrl-P тоже занята у вимеров. Поэтому самое удобное сочетание это ctrl-y, ctrl-o. Самый лучший конфиг:
hardstatus on
hardstatus alwayslastline
hardstatus string "%w%=%m/%d %c"
bind -c pastdemo1 0 paste 0 
bind -c pastdemo1 1 paste 1 
bind -c pastdemo1 2 paste 2 
bind -c pastdemo1 3 paste 3
bind -c pastdemo1 4 paste 4
bind -c pastdemo1 5 paste 5
bind -c pastdemo1 6 paste 6
bind -c pastdemo1 7 paste 7
bind -c pastdemo1 8 paste 8
bind -c pastdemo1 9 paste 9
bindkey "^O" command -c pastdemo1
bind -c copydemo1 0 readreg 0 
bind -c copydemo1 1 readreg 1 
bind -c copydemo1 2 readreg 2 
bind -c copydemo1 3 readreg 3
bind -c copydemo1 4 readreg 4
bind -c copydemo1 5 readreg 5
bind -c copydemo1 6 readreg 6
bind -c copydemo1 7 readreg 7
bind -c copydemo1 8 readreg 8
bind -c copydemo1 9 readreg 9
bindkey "^Y" command -c copydemo1

Комментариев нет:

Отправить комментарий