【问题标题】:How to make Less indicate location in percentage如何使 Less 以百分比表示位置
【发布时间】:2010-11-06 04:01:33
【问题描述】:

我现在的目标是在您运行时也显示百分号,例如,命令

man emacs

如果你运行它,你会得到例如'byte 3300'。

Alex's answer 建议我们需要通过

man "$1"| col -b > /tmp/manual
less /tmp/manual

其中 $1 指的是第一个参数。


新问题出现在thread感谢 Yuliy 的关键举措!

【问题讨论】:

  • 这看起来无限递归。即函数内部对 man 的调用将调用函数man,而不是可执行文件man
  • 我为新问题开了一个新线程:stackoverflow.com/questions/1053707/…
  • @Yuliy:你做了关键的动作。我们可能需要通过设置一个虚拟变量来以某种方式解除对 man 函数的绑定。
  • @Yuliy:如果我将其称为 mann,则该命令有效。
  • @Masi:请参阅my answer below,了解一种更简单的方法来做你想做的事。

标签: less-unix


【解决方案1】:
export LESS="-m"

更一般地说,LESS 环境变量可能包含与运行 less 时可以显式传递的命令行标志等效的选项——这里,-m 选项告诉它更丰富地提示(包括百分比,如你所问)。您还可以在该单个环境变量中传递多个选项,方法是每个选项都以$ 结尾。如需更多信息,请参阅less's manpage

编辑:当然有可能(取决于您使用 less 的方式,例如,如果您是通过管道传输它而不是在文件上调用它), less 知道它将显示的总大小,在这种情况下它当然不能显示 % - 在这种情况下,它会提示它所拥有的少量信息,例如,它显示了多少文本迄今为止。例如,man 确实通过管道使用 less

因此,如果您的特定需求是查看 man 中的 %(而不是直接在文件上调用 less),您需要使用“备用寻呼机”(环境变量 MANPAGER 或切换 @987654333 @ 在man 命令行上)这是一个简单的脚本,它将man 的输出保存到一个临时文件,然后在后者上使用less。 (这可能会失去人类自己的“着色”,除非您玩更深入和更深入的技巧等 - 类似地,您可以使用 man 的“预格式化页面”选项并将这样的预格式化页面解压缩到要运行的临时文件less 等,但这开始变成一个有点复杂的“简单脚本”;-)。

【讨论】:

  • @Alex:我的 Less 中似乎有问题,因为我看到了:files.getdropbox.com/u/175564/bugLess.png。当我读到手册末尾时,百分号开始起作用。 --- 我禁用了我的 .zshrc,所以错误不能在其中。
  • 有可能(取决于您使用 less 的方式,例如,如果您是通过管道传输它而不是在文件上调用它)less 不知道它将显示的总大小,在这种情况下,它当然不能显示 %。在这里,为了完整起见,让我用这个评论编辑答案。
  • @Alex:请在我的问题中查看我对您的建议的尝试。
  • 您的脚本是正确的,所以我不明白 (2)。我也不明白这与 emacs 或 vim 有什么关系,所以其他点对我来说也是个谜,特别是在“减少以百分比表示位置”的问题的背景下。为什么不针对 (1)、emacs 的东西、vim 的东西以及其他任何东西打开几个单独的问题呢?如果我在一个单独的问题中看到它,我可以尝试帮助解决(1)(如果你认为我对这个问题的回答足以接受,否则我会知道你太难取悦了;-)但肯定例如,不会解决 emacs 问题;-)。
  • 要获得更详细的less 提示,包括文件名和行号,请​​使用export LESS="-M"。我将它添加到我的~/.bashrc
【解决方案2】:

我的环境中有这个。它会在底部打印<filename> - Lines X-Y of Z,或者至少打印出它所拥有的信息。

export LESS='-P?f%f - .?ltLine?lbs. %lt?lb-%lb.?L of %L.:?pt%pt\%:?btByte %bt:-...'

【讨论】:

  • @John:我使用 OS/X。您的代码在我的 Less 中无效。它只会删除我由 % export LESS='-N' % 设置的行号
  • 您可以使用-M 获得几乎相同的东西,但感谢您向我展示它是如何在幕后完成的!
【解决方案3】:

添加到 Alex Martelli 的答案:

请注意,您也可以在运行时将任何命令行参数传递给less,只需键入它(包括-),然后按回车键。所以你可以输入

-m<Enter>

进入运行less来切换长提示。

这对于需要在运行时更改的选项特别有用,例如-S(线折叠开/关)。

【讨论】:

  • @sleske: 选项 -S 是否应该提供类似于 Vim 中的折叠? --- 好像是用空行去掉了重复的空行。
  • 不,-S (Shift-S) 只是换行,而不是在屏幕边缘切断它们。您看到的是 -s(只是小 s),它确实删除了重复的空行。
【解决方案4】:

在 Linux 上,我只需使用 Shift+G 转到手册页的末尾,然后使用 g 返回开头。 (或者您可以使用 '' 返回到之前的位置。

Less 然后有足够的信息来显示您在文件中的百分比。 (您可能需要输入 -M 才能获得长提示。)

这有点小技巧,但只有两次按键。不确定这是否适用于 OS/X。

【讨论】:

    【解决方案5】:

    解决方案

    knitatoms' answer 的较少手动版本 结合Alex Marteilli's answer 效果很好:通过其寻呼机选项将+Gg 选项传递给less

    例如,试试

    man -P 'less -s -M +Gg' man
    

    这可以通过放置永久生效

    export MANPAGER='less -s -M +Gg'
    

    在您的一个 shell 配置文件中(以上语法适用于 Bash 和 ZSH)。现在,例如,man man 显示百分比为您 想要!

    警告

    您应该+Gg 放入LESS 变量中!例如, 在做

    export LESS='-M +Gg'
    

    在读取非常大的文件时会导致问题。例如,

    yes | LESS='-M +Gg' less
    

    效果不太好……

    说明

    正如其他答案所解释的,问题是less 不能说 你在文件中的百分比是多少,直到它知道文件多长时间 是,而且读取时默认不读到文件末尾 来自管道。

    来自man lessOPTIONS 部分:

    +      If  a command line option begins with +, the remainder of that
           option is taken to be an initial command to less.   For  exam‐
           ple, +G tells less to start at the end of the file rather than
           the beginning, and +/xyz tells it to start at the first occur‐
           rence of "xyz" in the file.  As a special case, +<number> acts
           like +<number>g; that is, it starts the display at the  speci‐
           fied  line  number (however, see the caveat under the "g" com‐
           mand above).  If the option starts with ++, the  initial  com‐
           mand  applies  to  every file being viewed, not just the first
           one.  The + command described previously may also be  used  to
           set (or change) an initial command for every file.
    

    g 表示“返回文件开头”。

    来自man man

    -P pager, --pager=pager
           Specify which output pager to use.  By default, man uses pager
           -s.  This option overrides the $MANPAGER environment variable,
           which in turn overrides the $PAGER environment  variable.   It
           is not used in conjunction with -f or -k.
    
           The value may be a simple command name or a command with argu‐
           ments, and may use shell quoting (backslashes, single  quotes,
           or  double  quotes).  It may not use pipes to connect multiple
           commands; if you need that, use a wrapper  script,  which  may
           take  the file to display either as an argument or on standard
           input.
    

    【讨论】:

    • @Masi:感谢您的赏金!
    • 我正在考虑如何扩展您的代码yes | LESS='-M +Gg' less 这里stackoverflow.com/q/31027735/54964 我用大数据文件替换了yes 函数。情况应该一样吗?
    【解决方案6】:

    我使用了less 实时运行时-M

    这是: 提示符处的“-MEnter”,运行较少。

    对于非常大的缓冲区,我还必须走到最后才能“发现”它们的大小。 End 并返回 Home


    注意:我会在@sleske 的回答中发表评论,但最后我记得,cmets 不支持&lt;kbd&gt;Keyboard&lt;kbd&gt; 标签。

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 2012-02-04
      • 2016-11-07
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      相关资源
      最近更新 更多