Я использую tmux с ключами vi, и копирование / вставка работает нормально, если вы выбираете одну строку текста или если у вас только одно окно. Когда я хочу выделить блок текста (несколько строк, но не на всю ширину), тогда у меня возникают проблемы. Если бы у меня было открыто несколько окон vim, то он бы выделил текст из всех, и мне нужно было выбрать текст только из одного окна. То есть, как визуальный выбор в vim.
Возможно ли это сделать?
Ответы:
Обязательно проверьте нижнюю часть этого поста на наличие необходимых привязок, которые необходимо указать в файле .tmux.conf.
Я предполагаю, что ваш префикс ключ Ca:
Чтобы сделать выделение текста прямоугольником от (1,1) до (2,2) в tmux:
Обратите внимание, что нажатие space необходимо для выбора прямоугольника.
Чтобы выбрать строки, как обычно, перейдите в режим копирования и нажмите v, выберите с помощью клавиш jkhl и нажмите y.
У меня есть эти привязки в моем .tmux.conf:
До версии 2.4 (20 апреля 2017 г.) :
После версии 2.4 :
Важно отменить привязку прямоугольного переключателя по умолчанию:
В противном случае новая привязка 'Cv' не работает.
Примечание: чтобы иметь сингл,
.tmux.conf
который работает в разных версиях, посмотрите этот вопрос .источник
send
иsend-keys
. Я вижу в superuser.com/questions/196060/selecting-text-in-tmux-copy-modesend-key
используется. Также важны ли кавычки?Вы можете выбрать визуальный блок так же, как в vi - type
v
перед началом выделения. На странице руководства это называется «Переключение прямоугольника».источник
Как указывает Ларс, на
v
самом деле делает то, что вы просите, переключаясь между режимом прямоугольника и режимом выделения всей строки.space
иenter
используются соответственно, чтобы начать новый выбор и скопировать его. Войдите в режим копирования, используя префикс, а затем[
вставьте скопированный выбор в любое окно tmux, используя]
Это смутило меня еще и потому, что
v
функции в vim какspace
и в tmux, начинают выбор.Выпуск
:list-keys -t vi-copy
в tmux покажет полную таблицу команд в режиме копирования.источник
Поскольку ни один из других ответов не дает оптимального решения проблемы, я не выше некромантии.
Есть способ заставить выделение блоков работать так же, как в Vim, без необходимости нажимать пробел. Просто Ctrl-V, укоренившийся в вашей мышечной памяти.
Это требует редактирования вашего .tmux.conf (но использование vi-mode уже делает это), и я не уверен, что он работает для tmux <2.4.
Добавьте это в ваш .tmux.conf, чтобы скопировать выделение Vim и привязки янки:
Войдите в режим выбора и перейдите туда, где вы хотите начать выбор. Теперь
v
начинается обычный (посимвольный, посимвольный) выбор,<C-v>
начинается выбор блока иV
(shift-v) начинается выбор строки. Независимо от типа выделения,y
возвращает в буфер вставки tmux (или в буфер обмена X; см. Комментарии к коду выше).Так же, как Вим.
источник
РЕДАКТИРОВАТЬ: После проверки исходного кода, я полностью переписал свой ответ.
Первоначально я думал, что это невозможно, потому что я не мог заставить это работать, но другие ответы верны, чтобы
v
быть правильным ключом для этого, но не очевидно, как это использовать, особенно если вы привыкли к vim.Кроме того, это не сработало бы для меня, потому что я должен
v
былbegin-selection
- я думаю, что я должен был слепо скопировать эту идею откуда-то еще, чтобы имитировать vim способ начать мудрый выбор персонажа, не зная, что это вызовет проблемы в будущем с блок выбора.Как только я убрал эту привязку (закомментировав строку в моем
.tmux.conf
и перезапустив tmux), она начала работать, но все еще довольно запутанно, потому что это совсем не то же самое, что vim.С привязками по умолчанию это должно работать следующим образом:
setw -g mode-keys vi
вашим.tmux.conf
.C-a [
чтобы начать режим копированияv
Space
чтобы начать выборv
раз, чтобы переключить выбор обратно на выборку символов или наоборот.Вам не нужно вводить,
v
прежде чем нажатьSpace
. Вы можете начать посимвольное выделение сSpace
первого иv
затем нажать, чтобы переключиться в режим прямоугольного выделения.Он сильно отличается от vim тем, что в tmux вам нужно ввести два символа:
Space
иv
перейти в режим прямоугольного выделения. В vim нужно только набратьCtrl-V
.Также в vim
v
начинается выбор символов, а не блок.К сожалению, в tmux (
Shift-v
в vim) нет режима линейного выбора .РЕДАКТИРОВАТЬ: Похоже, что Tmux версии 2.0 обеспечивает режим линейного выбора с
Shift-v
(хотя я еще не пробовал!)источник
Shift-v
в выпуске 2.0, март 2015 г.), конечно после моего ответа и намного позже вашего первоначального ответа. Возможно, мы с тобой говорим о двух разных вещах, когда говорим о линейном выборе. Пожалуйста, сравните с 3 режимами выбора в VIM (сv
,Shift-v
иCtrl-v
).v
выбор мудрый характер. Я на версии 1.9a и у меня нет vim-подобного линейного выбора. Итак, с версией 2.0, три режима, которые есть у vim, возможны и в tmux, верно?