我想在tmux中使用emacs复制模式复制文件的全部内容。
然而,当我进入复制模式时,键入C空格开始突出显示文本,然后键入M->跳到文件的末尾,我最终只跳到tmux窗格底部的文件信息部分。
这是一张图片显示了发生的事情:
编辑:我是一个新用户,显然还不能发布图片。但基本上,您可以想象tmux复制模式中黄色高亮显示(选中)的文本。而不是文件的末尾,我只能突出显示到窗格的底部(看起来有点像这样):
-u-:----F1 file_name.rb Top L1 (Ruby)---------------------------------
我的问题是,如何进入复制模式,开始选择文本,然后跳到文件的末尾?
如果这不是实现我的目标(在tmux中复制整个文件的内容)的最佳方法,还有什么更好的方法呢?
thx!
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
答案是肯定的,而且很容易:
您需要运行其中一个tmux命令。您可以通过执行Ctrl+b+:并键入命令来运行tmux命令。
load-buffer path
或
loadb path
对于短
tmux并不真正理解您在其提供的tty中运行emacs。它只知道那个tty写了什么;因此,当您在tmuxcopy-mode
中按M->时,它只会移动到窗格滚动历史记录的底部(M->在copy-mode
中运行(特定于copy-mode
)tmpu命令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"))))