Режим копирования 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

Ответ 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/