有没有办法编写 tmux 插件来选择一行?

有没有办法编写 tmux 插件来选择一行?

acme“编辑器”有一个很棒的功能,您可以单击一些输出,例如

foobar.foo:212

acme 在该行号处打开该文件。

我很乐意在 tmux 中添加对类似内容的支持(我认为类似的东西已经不存在了)

我认为它的工作方式是,您进入复制模式,将光标放在一行上,然后运行一个命令,在您选择的编辑器中打开该行上的该文件。我的问题是 - 我不认为我可以在不分叉 tmux 的情况下实现类似的功能。有没有人有什么建议?

答案1

我不使用 acme,但我使用 Emacs。在 Emacs 中,可以将文件名传递给 open +<LINE_NUM> <FILENAME>,例如:+13 ~/HINTS.我将以下内容添加到我的~/.tmux.conf

bind C-e run "tmux save-buffer - | xargs emacs"

现在我可以+1 ~/HINTS在终端中写入,进入复制模式并复制该字符串,然后按使用 EmacsC-b C-e打开文件中的第 1 行。~/HINTS

答案2

您不能send-keys直接使用 in copy-mode,但您可以执行以下操作:

bind-key O send-keys space e enter \; new-window open-at-line \: paste-buffer \; send-keys enter

然后,在复制模式下,将光标放在 的第一个字母上filename:line并点击<prefix> O

这将复制文件名和行号 ( send-keys space e enter),使用命令打开一个新窗口open-at-line,这是一个 shell 脚本:

#!/usr/bin/env zsh
read combo
eval `vim ${combo:s/:/ -c :/}`

得到组合后的filename:linefrompaste-buffer并将其传递给vim

相关内容