如何搜索粗体或下划线文本?

如何搜索粗体或下划线文本?

如何搜索粗体或下划线文本?这对于搜索关键字通常很有用,这些关键字通常会突出显示。例如,在以下摘录中bash(1)

在此输入图像描述

我可能想搜索reador timeout,但仅搜索它会给我带来数十个无用的结果,我将不得不n忽略这些结果。您可以使用一些“技巧”来减少这种情况(例如搜索<Space>read<Space>read \[),但这并不总是适用于每个联机帮助页或关键字。

请注意,我并不是特别执着于此less。使用不同的寻呼机就可以了。less只是碰巧是默认寻呼机。

答案1

使用 Vim 作为MANPAGER.通过一些创造性的运用隐藏iskeyword,可以这样做:

setlocal nowrap
setlocal conceallevel=3
setlocal concealcursor=nvic
exe "setlocal iskeyword+=\b,_"
syntax match BACKHIDE '.\b' conceal contained
syntax match BOLD '\(.\)\b\1' contains=BACKHIDE
syntax match Underlined '_\b.' contains=BACKHIDE
highlight BOLD cterm=bold

在此输入图像描述

由于 Backspace 等键仍然存在,使用搜索单词*只会匹配类似突出显示的单词:

在此输入图像描述

man请注意如何找到粗体,但man当前行中的法线却没有找到。

更多设置(无耻的插件),Vim 为 提供了一个舒适的寻呼机man,并且比 更好less

为了让 Vim 应用相关设置,我会这样做:

  1. 在环境变量合适的地方,MANPAGER='vim -'.
  2. 在 中~/.vim/vimrc,至少有:

    set nocompatible
    filetype plugin on
    syntax on
    
    if !empty($MAN_PN)
        autocmd StdinReadPost * set ft=man | file $MAN_PN
    endif
    

    man对于使用启动的命令MANPAGER,环境变量中提供了联机帮助页名称MAN_PN。我们可以利用这一点来检测 Vim 何时被用作MANPAGER以及查找联机帮助页名称。

  3. ~/.vim/ftplugin/man.vim

    setlocal nolist 
    setlocal buftype=nofile
    setlocal bufhidden=hide
    setlocal noswapfile
    
    setlocal readonly
    setlocal nomodifiable
    
    setlocal nowrap
    setlocal conceallevel=3
    exe "setlocal iskeyword+=\b,_"
    setlocal concealcursor=nvic
    
    nnoremap q :q!<CR>
    nnoremap <Space> <PageDown>
    

    这些选项创建一个只读的、不可修改的暂存缓冲区(请参阅暂存缓冲区是如何创建的?在 Vim 维基百科中),禁用交换文件。然后,它应用本文开头列出的设置,并为了方便起见添加一些映射 -q将关闭当前的联机帮助页,并将Spacebar向下移动一页,如 中所示less

  4. ~/.vim/after/syntax/man.vim

    syntax match BACKHIDE '.\b' conceal contained
    syntax match BOLD '\(.\)\b\1' contains=BACKHIDE
    syntax match Underlined '_\b.' contains=BACKHIDE
    highlight BOLD cterm=bold
    

    这些是本文开头的语法和突出显示命令。

只需这些最低设置:

在此输入图像描述

请注意顶行是如何突出显示的 - Vim 本身附带了一些联机帮助页语法突出显示,如果您删除了退格键(col -b -x例如使用 ),您可以看到它。然而,通过这种方式你失去的比你得到的要多得多,因为 Vim 无法知道所有可能被下划线或粗体显示的内容。

我自己的个人设置使用摩洛凯岛配色方案set number、航空公司插件,以及 的不同突出显示BOLD

highlight link BOLD Constant

在此输入图像描述

而且因为我在终端设置中启用了透明度(在屏幕截图中不可见),所以颜色比此处看到的更柔和、更令人愉悦。

:set number如果您像我一样启用行号 ( ),请设置MANWIDTH为小于的值,COLUMNS这样您就不必横向滚动才能看到整个文本。MANWIDTH=75适用于 80 列终端。我使用与屏幕一样宽的下拉终端(160-240 列,具体取决于分辨率),因此固定终端MANWIDTH=80对我来说效果很好。

答案2

据我所知,没有干净的方法。

您可以关闭less用于显示下划线/粗体的退格键的特殊处理,然后使用转义的退格键来搜索您想要的字符串:

  1. 少开(例如man less
  2. 关闭 UNDERLINE-SPECIAL(类型-U<Enter>
  3. 输入搜索字符串,使用<C-v>退格字符进行转义。

例如,对于带下划线的文本,您可以输入

/_<C-v><C-h>l_<C-v><C-h>e_<C-v><C-h>s_<C-v><C-h>s<Enter>

...搜索带下划线的单词“less”。

对于粗体文本,您可以输入

/l<C-v><C-h>le<C-v><C-h>es<C-v><C-h>ss<C-v><C-h>s<Enter>

...搜索粗体词“less”。

正如我所说,没有干净的方式。


编辑:正如 Stephane 在评论中指出的那样,您可以使用点(匹配任何字符)而不是文字<C-h>,这使得输入更容易。

/l.le.es.ss.s

搜索粗体,并且

/_.l_.e_.s_.s

搜索带下划线的。

您仍然必须先关闭 UNDERLINE-SPECIAL,这使得下划线/粗体文本不太可读。

答案3

如果您看到它是粗体或带下划线的,那么您可能无法搜索它,因为您看到的是呈现

例如,如果文本来自任何格式化的联机帮助页,则它是通过将重击字符解释为

  • 粗体(当每个字符因退格并重复而被过度敲击时)或
  • 下划线(当每个字符都写在下划线字符上时)。

less寻呼机常见问题解答评论说解释粗体/下划线。它使用终端视频属性来显示实际的粗体/下划线。

在渲染过程中,典型的寻呼机(例如)less假装它只保存文本(粗体/下划线部分不是文本)。

在文本编辑器中,您可以搜索退格模式。也许某些特定的编辑器(例如 emacs)有能力做到这一点,即搜索文本(当它呈现为粗体/下划线时),但将粗体/下划线作为搜索的属性考虑在内。

阅读退格键不太令人愉快。这是问题中引用的联机帮助页的开头:

       r^Hre^Hea^Had^Hd [-^He^Her^Hrs^Hs] [-^Ha^Ha _^Ha_^Hn_^Ha_^Hm_^He] [-^H>
       _^Hp_^Hr_^Ho_^Hm_^Hp_^Ht] [-^Ht^Ht _^Ht_^Hi_^Hm_^He_^Ho_^Hu_^Ht] [-^Hu>
              从标准输入或文件中读取一行  
              描述符 _^Hf_^Hd 作为参数提供给 -^Hu^Hu 选项>
              第一个单词分配给第一个 _^Hn_^Ha_^Hm_^He,第二个 >
              第二个_^Hn_^Ha_^Hm_^He,等等,还有剩下的词和他们的>
              ing 分隔符分配给最后一个 _^Hn_^Ha_^Hm_^He。如果有>
              从输入流中读取的单词比名称,剩余的名称

答案4

不是对您问题的直接回答,但为了更轻松地在像bash这样的大型手册中找到文档,您可以尝试以下替代方案:

使用不同的格式,例如info

与大多数 GNU 软件的手册一样,该bash手册也是用 texinfo 编写的,从中衍生出多种格式(man、info、pdf、html...)。

手册页称为因为某种原因。它只是一个平面文本文件,其中唯一的结构是通过字体格式(缩进、粗体、下划线、全部大写)完成的。

对于这种尺寸的手册,您宁愿需要一个比一个

虽然man实现了范例,信息实现了范例。它具有章节、目录、参考文献和索引的概念,所有这些都可以完成搜索。

在一本关于 bash 的书中,要了解read内置函数,您需要查看索引。在 中info,您键入i,然后输入read(可完成),这将直接带您进入内置文档的文档read(用于,跳转到包含 的下一个索引条目read)。您也可以从info开始info bash read

在书中,如果您想查看有关内置函数的部分,您可以再次检查索引,或者查看目录。infoi和相同g

搜索网页

HTML 是另一种超文本格式(请注意,它info早于网络和 HTML),非常适合大型手册。网络浏览器通常一次只能在一个页面中搜索,这使得它不如info,但如果您在线,您可以使用duckduckgo或google等搜索引擎来搜索手册。

bash read builtin site:gnu.org

可能会将您带到包含read.或者您可以使用索引:https://www.gnu.org/software/bash/manual/html_node/Builtin-Index.html#Builtin-Index

根据其他格式搜索手册页

您还可以尝试:

  • read在行首搜索:/^\s*read
  • 也作为一个完整的词:/^\s*read\>/
  • 您还可以利用节标题缩进较少的事实来获取目录形式。

    most分页器中,可以通过1:od隐藏缩进的文本、4:od隐藏缩进至少 4 列的文本来完成。

    使用,您可以使用和less执行相同的操作,这将显示如下内容:&^\S&^ {,3}\S

    [...]
    RESERVED WORDS
    SHELL GRAMMAR
       Simple Commands
       Pipelines
       Lists
       Compound Commands
       Coprocesses
       Shell Function Definitions
    COMMENTS
    QUOTING
    [...]
    

    并让您更轻松地导航到感兴趣的部分(然后只需输入一个空白&即可再次查看全文,或:od在 中输入most)。

相关内容