Как мне скопировать все содержимое файла (›1 панель) в режиме копирования Tmux emacs?

Я хочу скопировать все содержимое файла, используя режим копирования emacs в tmux.

однако, когда я вхожу в режим копирования, набираю C-пробел, чтобы начать выделять текст, а затем набираю M->, чтобы перейти к концу файла, я просто перехожу в раздел информации о файле в нижней части панели tmux.

вот картинка, показывающая, что происходит:

изменить: я новый пользователь и, по-видимому, еще не могу опубликовать картинку. но в основном вы можете представить себе выделенный желтым (выделенный) текст в режиме копирования tmux. вместо конца файла я могу выделить только нижнюю часть панели (которая выглядит примерно так):

-u-:----F1 file_name.rb      Top L1      (Ruby)---------------------------------

у меня вопрос: как войти в режим копирования, начать выделять текст и перейти к концу файла?

и если это не лучший способ достичь моей цели (скопировать содержимое всего файла в tmux), что может быть лучше?

Спасибо!

p.s.

я выполнил инструкции здесь: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard

а также инструкции из практической книги tmux.

в случае, если это поможет, вот соответствующие строки из моего файла .tmux.conf (который я в основном скопировал из прагматичной книги tmux):

# use pbcopy|pbpaste wrapper script
set-option -g default-command "reattach-to-user-namespace -l zsh"

# send contents of current tmux buffer to system clipboard
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"

# support pasting from the system clipboard
bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste buffer"

# overriding "auto-detection" to always use emacs
set-option -g status-keys emacs
set-option -gw mode-keys emacs

person d3vin    schedule 05.09.2012    source источник


Ответы (2)


tmux на самом деле не понимает, что вы запускаете emacs на tty, который он предоставил. Он знает только то, что было записано на этот tty; поэтому, когда вы нажимаете M-> в tmux copy-mode, он просто перемещается в нижнюю часть истории прокрутки панели (M->, а в copy-mode запускает (copy-mode-специфичный) tmux < / em> команда history-bottom).

Вам действительно нужно подойти к этой проблеме изнутри emacs. Вот несколько (выполняемых в интерактивном режиме) примеров функций, которые можно привязать к клавише emacs:

(defun write-region-to-tmux-buffer (beg end)
  (interactive "r")
  (shell-command-on-region beg end "tmux load-buffer -" nil nil nil t))

(defun write-buffer-to-tmux-buffer ()
  (interactive)
  (write-region-to-tmux-buffer (point-min) (point-max)))

Если вы хотите обойти буфер и использовать вместо него файл (т.е. создать буфер из файла на диске, а не (возможно, измененного) содержимого буфера), вы можете использовать что-то вроде этого:

(defun write-buffer-file-to-tmux-buffer ()
  (interactive)
  (let ((fn (buffer-file-name)))
    (if fn
        (shell-command
         (concat "tmux load-buffer "
                 (shell-quote-argument fn)))
      (error "Not a file-backed buffer"))))
person Chris Johnsen    schedule 06.09.2012
comment
спасибо за ответ. Поскольку я пока только скопировал / вставил конфигурации emacs, мне может потребоваться взлом, чтобы понять это. так что я вернусь к вашему ответу, как только выясню это. примечание: у меня есть изучение GNU emacs, 3D-изд., написание расширений GNU emacs, а также руководство FSF по GNU emacs для справки. Если вы знакомы с этими источниками (или другими справочными материалами) - и у вас есть несколько свободных минут - не стесняйтесь указать мне на информацию, которая научит меня использовать ваши примеры функций для привязки к клавишам в emacs. -Спасибо! - person d3vin; 06.09.2012
comment
На самом деле я не особо являюсь пользователем Emacs, но что-то вроде (global-set-key (kbd "C-c t") 'write-region-to-tmux-buffer), вероятно, будет работать (т.е. в вашем .emacs файле вместе с определением (ями) функции). - person Chris Johnsen; 06.09.2012
comment
это круто - спасибо! для решения я добавил (defun write-buffer-file-to-tmux-buffer ()... и (global-set-key (kbd "C-c t") 'write-buffer-file-to-tmux-buffer) в свой файл ~ / .emacs. затем внутри tmux я загружал файл, нажимал C-c t, затем [prefix] C-c и вставлял результат в TextEdit.app (для проверки). работал как шарм. - person d3vin; 06.09.2012

Ответ - да, и это довольно просто:

Вам нужно запустить одну из команд tmux. Вы можете запустить команду tmux, нажав Ctrl + b +: и набрав команду.

load-buffer path

or

loadb path

коротко

person sbochins    schedule 12.10.2012
comment
да, это тоже работает. кажется более удобным для копирования содержимого файлов, когда на самом деле файлы не просматриваются в tmux. - person d3vin; 13.10.2012
comment
Не работает в случае SSH - person j5shi; 12.01.2021