【问题标题】:tmux man-page search highlightingtmux 手册页搜索突出显示
【发布时间】:2012-05-19 02:38:31
【问题描述】:

例如,当我在 tmux 会话中搜索 man ls 时,搜索字符串不会突出显示 - 页面会向下跳转,因此搜索字符串位于缓冲区的顶行,如预期的,但它没有突出显示。

不在tmux 会话中的同一shell 中执行相同操作会导致搜索字符串突出显示。

我不知道从哪里着手解决这个问题。任何提示表示赞赏。

【问题讨论】:

  • 最可能的解释是 tmux 将TERM 环境变量设置为screen。出于某种原因,screen-type 终端不支持在您的系统上突出显示。我刚刚用 tmux 1.6 和 PuTTY 在我的旧 Ubuntu 机器上进行了尝试,至少这种组合可以正常工作。
  • 只是为了好玩,您可以尝试使用 tmux -2 运行 tmux,看看是否可以解决问题。
  • @Casper 我在screen 会话中得到了突出显示的字符串,但是$TERM=screen。运行 tmux -2tmux -8 似乎没有帮助。
  • 是的。必须是 tmux 中的东西。我找到了一台可以半重现您的问题的机器。当我在这台机器上运行 tmux 时,所有颜色功能都消失了。但是就像你在这台机器上运行 screen 一样,但不是 tmux。

标签: tmux gnu-screen terminal-emulator ansi-escape terminfo


【解决方案1】:

基于Gen2lyLess Colors For Man Pages,这是我的手册页以及操作方法:

预览

这是一个外壳,而不是一个网页!

如何

  1. (可选)我将Tomorrow theme 用于Konsole/Yakuake
  2. 编辑您的~/.bashrc~/.zshrc等以添加:

    # Colored man pages: http://linuxtidbits.wordpress.com/2009/03/23/less-colors-for-man-pages/
    # Less Colors for Man Pages
    export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking
    export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold
    export LESS_TERMCAP_me=$'\E[0m'           # end mode
    export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode
    export LESS_TERMCAP_so=$'\E[38;5;016m\E[48;5;220m'    # begin standout-mode - info box
    export LESS_TERMCAP_ue=$'\E[0m'           # end underline
    export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline
    
  3. 重新加载您的配置并尝试手册页搜索:

    . ~/.bashrc && man ls
    

【讨论】:

  • $'\E[01;31m' 是什么意思?我想弄清楚如何在 csh/tcsh shell 中设置这个环境变量。
  • 我能够使用lesstcsh 上使用this solution 获得man 中的颜色。使用tput 而不是转义码。对于tcsh,将$(foo) 替换为foo
  • 我仍然想了解export LESS_TERMCAP_mb=$'\E[01;31m' 如何转换为tcsh 中的setenv 命令.. 里面的$ 字符令人困惑。
  • @KaushalModi $'…'ANSI C-like string
  • 谢谢。谷歌未能找到在 tcsh 中表示 ANSI 字符串的等效方法。我很高兴tput 方法存在:)
【解决方案2】:

修复它。问题与screen $TERM 处理斜体的方式有关。来自tmux FAQ

vim 显示反向视频而不是斜体,而 less 显示斜体 (或只是常规文本)而不是反向。怎么了?

这完全符合我的问题。 man 使用的$PAGER 默认为less - 基本上,man 使用less 显示手册页的内容。就我而言,less 没有突出显示文本,只是显示常规文本。

发生这种情况的原因:

Screen 的 terminfo 描述缺少斜体模式,并且在其 位置,但使用 urxvt 用于斜体的相同转义序列。这 意味着寻找斜体的应用程序(如 vim)将找不到它并且可能 在它的位置转向反转,而应用程序(如更少)要求 突出显示会以斜体而不是反向结束。

解决方案是为tmux 创建一个新的terminfo 文件,让它知道支持斜体。该解决方案在tmux FAQ 的非常非常底部(在撰写本文时)进行了概述。

创建新的terminfo 文件后,在tmux 中:C-b :source-file /absolute/path/to/.tmux.conf(来自this SuperUser question) - 这应该使tmux 重新加载.tmux.conf 文件。但是,这对我不起作用,并且更改仅在重新启动 tmux 服务器后应用(关闭所有 tmux 会话,然后重新打开它们)。

【讨论】:

  • 关于将设置应用于正在运行的tmux 实例:它重新加载并应用配置就好了,问题是客户端(程序)已经在该tmux 实例的窗口和窗格中运行他们的终端设置来自他们在启动时读取的TERM 环境变量,虽然新启动的客户端将在他们的环境中看到新的终端名称,但已经运行的客户端无法获取它和他们的设置已更新——没有重新运行它们(以及它们启动的 shell,如果有的话)。
  • 在 Debian 8 Jessie 上,最初的常见问题解答建议不起作用。症状:terminal 'tmux-256color': resolution of use=xterm+256setaf failed。在这种情况下,@Christy 的解决方案成功了。
【解决方案3】:

这个话题已经有几年的历史了,但仍然是最好的搜索结果,所以我用最终对我有用的答案来回答。这是基于tmux FAQ

...但是关于何时何地替换 -256color 字符串的说明并不完全清楚。我将 gnome-terminal (v 3.16.2) 与 tmux 一起使用,这对我有用:

$ mkdir $HOME/.terminfo/
$ screen_terminfo="screen-256color"
$ infocmp "$screen_terminfo" | sed \
  -e 's/^screen[^|]*|[^,]*,/screen-256color|screen with italics support,/' \
  -e 's/%?%p1%t;3%/%?%p1%t;7%/' \
  -e 's/smso=[^,]*,/smso=\\E[7m,/' \
  -e 's/rmso=[^,]*,/rmso=\\E[27m,/' \
  -e '$s/$/ sitm=\\E[3m, ritm=\\E[23m,/' > /tmp/screen.terminfo
$ tic /tmp/screen.terminfo

并告诉 tmux 在 ~/.tmux.conf 中使用它:

set -g default-terminal "screen-256color"

注意:我在没有 -256color 的情况下尝试过一次,因为它不起作用(仍然看到斜体而不是突出显示),我不得不在 infocmp 之前删除 .terminfo 目录(另一个名为“s”的目录)下的所有内容会工作的。

【讨论】:

  • 在使用less 查看日志时,我仍然看到斜体而不是突出/突出显示,我意识到这是我使用 sudo 的 b/c(因为它们在 /var/log 下)。修复:` ~> sudo rsync -rP ~/.terminfo /root/.发送增量文件列表 .terminfo/ .terminfo/s/ .terminfo/s/screen-256color 1,560 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/3) ~> sudo cp ~ /.tmux.conf /root/. `
  • 为我工作。我创建了this one liner,以便我可以快速将其添加到新服务器
猜你喜欢
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 2018-03-05
  • 2012-08-04
  • 2012-05-21
  • 1970-01-01
相关资源
最近更新 更多