tmux是否支持相对行号?

17

背景.

我是一个经常使用vim的用户,我喜欢它可以让我在不用鼠标的情况下导航缓冲区的方式。我特别喜欢相对行号,这让我可以通过跳转到特定行来更快地导航。我也经常使用tmux,因为我通常在我的终端上同时运行很多东西。

然而,最困扰我的事情是当我使用tmux复制模式时,如果你使用箭头键、ctrl+p或k,它就需要很长时间才能导航到你要复制的行(行)。

在缓冲区中搜索唯一关键字也不理想,但如果你已经知道要搜索什么,它可能会更快。很多时候,你进行搜索后才发现你搜索的关键字并不那么独特,你最终也没有跳转到你希望的行。

我的问题是:

tmux是否支持相对行号?

..或者说是否支持任何行号呢?

我在网上找不到任何相关信息。似乎没有人在任何地方提到这个。有更好的方法吗?

如果您有关于在tmux复制模式下使用键盘进行超快速导航的其他提示,也非常感谢。


我同意tmux-copy模式有时候有点难以控制满足你的需求。https://github.com/tmux-plugins/tmux-yank试图帮助你,但我个人并不经常使用它。 - edi9999
我还创建了https://github.com/edi9999/path-extractor,用于从stdin中查找文件名(以用作管道),并且有一个问题(https://github.com/edi9999/path-extractor/issues/2)说明如何在tmux中使用它。 - edi9999
3个回答

15

tmux在复制模式下有一个行号系统,但第一行是非常底部的。

在复制模式下,您可以按:键进入跳转到行模式,但没有显示行号的选项。您可以在复制模式下使用一些vim动作(键模式设置为vi),例如j k 20j 20k f F t T gg G 20G H L M ^ $ / ? ctrl-u ctrl-d w b ....

我认为对于复制文本块来说已经足够了。如果您仍然觉得无法实现“超高速导航”,请提供场景,让我们看看如何更快地复制。

有关详细信息,请查看tmux的man页面。


很棒的答案,使用 H、L 和 M 键可以至少将行程距离缩短一半。 - Master Wo
在Mac中,您还可以使用fn+上/下来快速滚动。 - subtleseeker

2
这是一个完全的hack,但它能够工作:

tmux split-window -h -l 3 -b "printf '\e[38;5;0m\e[48;5;226m' \
  && seq 200 1 \
  && echo -n 0 \
  && read" \
&& tmux select-pane -l

为了更好地理解:

  • tmux split-window -h -l 3 "command..." 将窗格水平分割(即在当前窗格旁边放置一个新窗格,而不是上方或下方),并将宽度设置为 -l 3(你不太可能需要超过3位数的行号... 0-999),放置在当前窗格的左侧,并在其中运行命令:
    • printf ... 只是将背景色设置为黄色,前景色设置为黑色... 如果你不想要这个花哨的效果,可以省略这一部分 :)
    • seq 200 1 打印从200到1的行号 - 如果你的屏幕很高,可以扩展范围!
    • echo -n 0 在最后一行打印0,因为seq会打印一个尾随换行符,我们不希望出现这种情况
    • read 等待你按下回车键 - 这是我们阻止它在echo完成后关闭的方法
  • tmux select-pane -l 跳回到你正在工作的窗格
选择窗格并按回车键关闭它。
我认为你可以做一些事情,为新窗格添加一个名称,并为打开和关闭它从你实际尝试计算行数的窗格创建一个键绑定,但目前我只是使用绑定:
bind N split-window -h -l 3 -b "printf '\e[38;5;0m\e[48;5;226m' && seq 200 1 && echo -n 0 && read" \; select-pane -l

为什么不使用 seq $ROWS 1 呢?或者是 $(tput rows) 呢? - D. Ben Knoble

2

我发现了这个技巧。它可以帮助你用更少的按键找到你想要的行。

# super fast way to reach copy-mode and search upwards
bind-key / copy-mode \; send-key ?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接