4

我想在 tmux 中使用 emacs 复制模式复制文件的全部内容。

但是,当我进入复制模式时,键入 C-space 开始突出显示文本,然后键入 M-> 跳转到文件末尾,我最终只是跳转到 tmux 窗格底部的文件信息部分。

这是一张显示发生了什么的图片:

编辑:我是新用户,显然还不能发布图片。但基本上你可以想象在 tmux 复制模式下黄色突出显示(选定)的文本。而不是文件的末尾,我只能突出显示到窗格的底部(看起来有点像这样):

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

我的问题是,我怎样才能进入复制模式,开始选择文本,然后跳转到文件末尾?

如果这不是实现我的目标的最佳方法(在 tmux 中复制整个文件的内容),那么有什么更好的方法呢?

谢谢!

ps

我已按照此处的说明进行操作: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
4

2 回答 2

3

答案是肯定的,而且很简单:

您需要运行 tmux 命令之一。您可以通过执行 Ctrl+b+: 并键入命令来运行 tmux 命令。

load-buffer path

或者

loadb path

简称

于 2012-10-12T00:35:45.383 回答
1

tmux并不真正了解您在它提供的 tty中运行emacs 。它只知道已写入该 tty 的内容;因此,当您在tmux copy-mode中按 M-> 时,它只会移动到窗格的回滚历史记录的底部(M-> while incopy-mode运行 ( copy-mode-specific) tmux命令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"))))
于 2012-09-06T04:14:59.557 回答