是否可以在zsh / terminal中突出显示不可破坏的空间?


5

我正在寻找可能以某种方式突出显示\xA0shell输出中的不可破坏空格(),以便在调试会话期间将其与正常空间区分开来。E. g。,我希望看到类似的输出$ echo -e "[\xC2\xA0]|[ ]"

[_]|[ ]

颜色,下划线,甚至闪烁都可以。我甚至可以切换zsh到任何可配置的shell。它至少可能吗?

Answers:


4

这个突出显示是在终端模拟器中比在shell中更容易实现的恕我直言。并且作为一个好处,你可以独立于shell获得突出显示 - 所以它甚至可以使用less等等。因为你可以切换shell,我想你也可以切换到URxVt

结合perl扩展urxvt-perls,可以使URL等可点击。但我们可以滥用此功能只是为了强调不可破坏的空间。

配置完成于~/.Xdefaults

URxvt.perl-ext:           default,matcher
URxvt.matcher.button:     2
URxvt.matcher.pattern.0:  (\\240)
URxvt.matcher.launcher.0: /bin/true
  • 第1行激活相应的扩展名
  • 第2行配置鼠标中键的使用,点击超链接''
  • 第3行定义要匹配的正则表达式,这里是每个不可破坏的空间; A0 (hex) = 240 (oct)
  • 第4行定义了动作,在你的情况下你不想打开浏览器或任何程序,所以/bin/true应该没问题

~/.Xdefaults通过重新启动X服务器重新加载(这可能是过度杀伤,但我不确定是否xrdb ~/.Xdefaults足够......)并且您获得了所需的结果。使用放大镜,甚至可以区分不可破坏的空间和下划线(注意移位1个像素);)

在此输入图像描述


以下是“后端”解决方案的概念证明。要知道,这将打破了很多东西,也就是互动节目一样manless等(vim抱怨,但仍然工作)。这种方法由Atom Smasher在2009年5月16日星期六zsh-users邮件列表上发布,以进行着色。我按照你的要求采用了它:STDERR

# ## highlight_nbs.zsh ##

zmodload zsh/terminfo zsh/system
autoload colors is-at-least

if [[ "${terminfo[colors]}" -ge 8 ]] { colors }

highlight_nbs() {
  while sysread line
  do
    syswrite "${line//$'\xC2\xA0'/${bg[red]} ${terminfo[sgr0]}}"
  done
}

precmd() { sleep 0 }

## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec  > >(highlight_nbs)

棘手的部分是exec > >(highlight_nbs)通过highlight_nbs函数处理替换shell的完整输出。该precmd定义对于避免竞争条件是必要的,否则在执行命令的实际输出之前打印新提示。

这是一个演示:

在此输入图像描述


谢谢。这似乎是一个怪癖模式的解决方案。虽然它可能在每个调试会话的基础上临时解决问题,但它仍然几乎没有帮助远程(比如说ssh)会话。这是一种前端解决方案,我仍然希望找到一个后端。但无论如何,谢谢你,这至少解决了我目前的问题。
Aleksei Matiushkin 2013年

@mudasobwa:也许你可以在你的问题中详细说明你的要求。从我的角度来看,前端解决方案(你如何称呼它)甚至更优越,因为它独立于你登录的系统(通过ssh或者其他什么)。只要您使用“您的”计算机和urxvt,您就会得到突出显示。或者反过来说:你从不同的机器登录到一个远程系统?!
2013年

是的,一般来说,要解决的问题是:我有一定数量的计算机作为ssh-clients,以及一堆ssh-hosts。我想在遥控器上有类似“yadr-like”的设置。
Aleksei Matiushkin 2013年

@mudasobwa:我为“后端”解决方案添加了一个想法。它远非完美,但也许它对你有用。
mpy 2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.