【问题标题】:How do I copy entire contents of file (>1 pane) in Tmux emacs copy mode?如何在 Tmux emacs 复制模式下复制文件的全部内容(> 1 窗格)?
【发布时间】:2012-08-30 15:11:06
【问题描述】:

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

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

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

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

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

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

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

谢谢!

附言

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

【问题讨论】:

    标签: emacs tmux


    【解决方案1】:

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

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

    load-buffer path
    

    loadb path
    

    简称

    【讨论】:

    • 是的,这也有效。在不实际查看 tmux 中的文件时,复制文件内容似乎更方便。
    【解决方案2】:

    tmux 并不真正了解您在它提供的 tty 中运行 emacs。它只知道已写入该 tty 的内容;因此,当您在 tmux copy-mode 中按 M-> 时,它只是移动到窗格的回滚历史记录的底部(M-> 而在 copy-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"))))
    

    【讨论】:

    • 感谢您的回答。因为到目前为止我只复制/粘贴了 emacs 配置,所以我可能需要一些黑客才能弄清楚这一点。所以一旦我弄清楚了,我会重新审视你的答案。 注意: 我有 o'reilly 的“learning GNU emacs, 3d ed.”、“writing GNU emacs extensions”以及 FSF 的“GNU emacs manual”供参考。如果您熟悉这些资源(或其他参考资料)——并且有几分钟的空闲时间——请随时向我指出将教我使用您的示例函数绑定到 emacs 中的键的信息。 -谢谢!
    • 我真的不是一个 Emacs 用户,但是像 (global-set-key (kbd "C-c t") 'write-region-to-tmux-buffer) 这样的东西可能会起作用(即在你的 .emacs 文件中,以及函数定义)。
    • 太棒了-谢谢!为了解决我在 ~/.emacs 文件中添加了 (defun write-buffer-file-to-tmux-buffer ()...(global-set-key (kbd "C-c t") 'write-buffer-file-to-tmux-buffer)。然后,在 tmux 内部,我将 emacs 放入一个文件中,按 C-c t 然后按 [prefix] C-c 并将输出粘贴到 TextEdit.app(进行测试)。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 2015-11-29
    • 2015-05-21
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多