Режим копирования Tmux: как создать свою собственную команду?
Мне нравится Tmux и его режим копирования с Vi-командами, но меня очень раздражает тот факт, что этот режим очень далек от того, чтобы быть таким же эффективным, как настоящий Vim.
Например, нет ключевого слова, чтобы просто скопировать слово (yw), я должен всегда "перейти к началу слова", "начать выбор", "перейти к концу слова", затем "завершить выбор", Много операций, когда мне просто нужно делать yw в vim.
Я искал способ создать свою собственную команду "yw" в режиме копирования Tmux. Цепочка всех необходимых операций - хорошая идея, но простое связывание с командами, разделенными ;
, просто не работает (аналогичная вещь работает в режиме без копирования). Что-то я пропустил? Или режим копирования Tmux ограничен, а не как скриптовый, как мне нужно?
Ответы
Ответ 1
У меня это в моем tmux conf:
# vi-style controls in copy mode
set-option -g status-keys vi
set-window-option -g mode-keys vi
# v and y like vi in copy-mode
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
Теперь, после перехода в режим копирования, я могу легко выбрать слова:
v w
И скопируйте с помощью
y
В tmux вы должны выбрать что-то для копирования. Нет ничего похожего на копирование в нормальном режиме, как вы знаете из обычных команд vi/vim. К сожалению, для каждого аргумента tmux можно использовать один ключ (например, v
или y
).
Подробнее о командах движения tmux vi вы можете найти здесь: https://superuser.com/a/197272/57890
Ответ 2
Это кажется ошибкой в команде bind-key
при вызове с опцией -t
. Я отправил отчет об ошибке в https://sourceforge.net/tracker/?func=detail&aid=3533562&group_id=200378&atid=973262.
Ответ 3
В предыдущей версии (2.4+) tmux это изменилось, чтобы создать привязки для начала выбора, вам нужно использовать -T
и send-keys с -X
.
Дополнительная информация в tmux changelog.
Здесь мои привязки для режима vi copy:
# Bind `v` to trigger selection
bind-key -T copy-mode-vi v send-keys -X begin-selection
# Bind `y` to yank current selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# Rebind `mouse click + drag button release` to not jump away from context
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-selection
Если используется режим emacs, замена copy-mode-vi
на copy-mode
должна быть достаточной.
Ответ 4
Там патч для tmux, позволяющий создавать процедуры и связывать любое количество действий для нажатий клавиш "mode": http://ershov.github.io/tmux/