Как эмулировать Emacs-подобные регистры в Tmux? - PullRequest
0 голосов
/ 05 февраля 2020

Я давно использую Emacs регистры , и они являются благословением во многих сложных сценариях редактирования ios (например, редактирование нескольких взаимосвязанных файлов конфигурации, использование нескольких фрагментов кода, жонглирование параграфов и выражений вокруг и др. c.). Их универсальность практически безгранична. У меня также был проблеск в Vim registers , и в большинстве случаев они в основном эквивалентны. Я столкнулся с некоторым сценарием использования ios, когда хотел, чтобы у Tmux была похожая функция. Вопрос: это можно использовать в Tmux и как это сделать?

1 Ответ

0 голосов
/ 05 февраля 2020

Сначала я сказал себе: Я просто go и посмотрю исходный код Tmux. Я узнаю, как он обрабатывает копирование / вставку и копирует поведение для некоторого числа предопределенных регистров, скажем, 26 для каждой буквы латинского алфавита . Поэтому я сделал это и, к моему удивлению, обнаружил, что функциональность уже есть, хотя и не очень хорошо разрекламирована.

Концепция называется buffers там и предоставляет простой интерфейс set-buffer, delete-buffer и paste-buffer. Поэтому я решил создать привязки в моем .tmux.conf - один для замены выбранного пользователем буфера выбранным текстом (сначала выполните delete-buffer, а затем set-buffer), а другой для вставки из выбранного пользователем буфера , Это почти сработало, за исключением того, что по какой-то причине delete-buffer не изящно обрабатывал несуществующие буферы. Моя идея заключалась в том, чтобы инициализировать 26 буферов под соответствующими буквами и все было сделано. Сегодня я попробовал свой подход без инициализированных буферов, и он все еще работал. Возможно, новые версии Tmux справятся с этим лучше. В любом случае, ниже я вставляю соответствующий фрагмент конфигурации:

# Initialize alphabetic registers to avoid the problem with 'delete-buffer'
# This might *not* be necessary in newer versions of Tmux
run "tmux set-buffer -b a \"$(echo ' ')\""
run "tmux set-buffer -b b \"$(echo ' ')\""
run "tmux set-buffer -b c \"$(echo ' ')\""
run "tmux set-buffer -b d \"$(echo ' ')\""
run "tmux set-buffer -b e \"$(echo ' ')\""
run "tmux set-buffer -b f \"$(echo ' ')\""
run "tmux set-buffer -b g \"$(echo ' ')\""
run "tmux set-buffer -b h \"$(echo ' ')\""
run "tmux set-buffer -b i \"$(echo ' ')\""
run "tmux set-buffer -b j \"$(echo ' ')\""
run "tmux set-buffer -b k \"$(echo ' ')\""
run "tmux set-buffer -b l \"$(echo ' ')\""
run "tmux set-buffer -b m \"$(echo ' ')\""
run "tmux set-buffer -b n \"$(echo ' ')\""
run "tmux set-buffer -b o \"$(echo ' ')\""
run "tmux set-buffer -b p \"$(echo ' ')\""
run "tmux set-buffer -b q \"$(echo ' ')\""
run "tmux set-buffer -b r \"$(echo ' ')\""
run "tmux set-buffer -b s \"$(echo ' ')\""
run "tmux set-buffer -b t \"$(echo ' ')\""
run "tmux set-buffer -b u \"$(echo ' ')\""
run "tmux set-buffer -b v \"$(echo ' ')\""
run "tmux set-buffer -b w \"$(echo ' ')\""
run "tmux set-buffer -b x \"$(echo ' ')\""
run "tmux set-buffer -b y \"$(echo ' ')\""
run "tmux set-buffer -b z \"$(echo ' ')\""

# Copy to user-selected register
bind -T copy-mode r command-prompt -1 -p '(register)' 'delete-buffer -b %1 ; send -X copy-pipe "tmux set-buffer -n %1"'

# Paste from user-selected register
bind -T prefix C-] command-prompt -1 -p '(register)' 'paste-buffer -b %1'

Способ использования этой настройки заключается в следующем:

  • , чтобы поместить текст в регистр, в котором вы отметили его copy-mode, нажмите r и ответьте на запрос имени регистра
  • , чтобы вставить команду C -b C -] и ответить на запрос - буфер содержимое будет вставлено в точку
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...