如何搜索粗体或带下划线的文本?这对于搜索经常被突出显示的关键字通常很有用。例如,在此摘录中bash(1):
我可能想搜索reador timeout,但只搜索那个会给我几十个我将不得不n过去的无用结果。您可以使用一些“技巧”来减少这种情况(例如搜索<Space>read<Space>或read \[),但这并不总是适用于每个联机帮助页或关键字。
请注意,我并不是特别喜欢less这样;使用不同的寻呼机很好。less恰好是默认寻呼机。
使用 Vim 作为MANPAGER. 通过一些创造性地使用hide和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
Run Code Online (Sandbox Code Playgroud)
由于退格键等仍然存在,因此使用 using 搜索单词*将仅匹配类似突出显示的单词:
man请注意如何找到粗体,但man当前行中的法线却没有找到。
通过一些更多的设置(无耻的插件),Vim 为 提供了一个舒适的寻呼机man,并且比 更好less。
为了让 Vim 应用相关设置,我会这样做:
MANPAGER='vim -'.在 中~/.vim/vimrc,至少有:
set nocompatible
filetype plugin on
syntax on
if !empty($MAN_PN)
autocmd StdinReadPost * set ft=man | file $MAN_PN
endif
Run Code Online (Sandbox Code Playgroud)
man对于使用启动的命令MANPAGER,环境变量中提供了联机帮助页名称MAN_PN。我们可以利用这一点来检测 Vim 何时被用作MANPAGER以及查找联机帮助页名称。
在~/.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>
Run Code Online (Sandbox Code Playgroud)
这些选项创建一个只读的、不可修改的暂存缓冲区(请参阅Vim Wikia 中的暂存缓冲区是如何创建的?),禁用交换文件。然后,它应用本文开头列出的设置,并为了方便起见添加一些映射 -q将关闭当前的联机帮助页,并将Spacebar向下移动一页,如 中所示less。
在~/.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
Run Code Online (Sandbox Code Playgroud)
这些是本文开头的语法和突出显示命令。
只需这些最低设置:
请注意顶行是如何突出显示的 - Vim 本身附带了一些手册页语法突出显示,如果删除了退格键(使用col -b -x例如使用 ),您可以看到它。然而,通过这种方式你失去的比你得到的要多得多,因为 Vim 无法知道所有可能被下划线或粗体显示的内容。
我自己的个人设置使用molokai colorcheme、set number航空公司插件以及不同的突出显示BOLD:
highlight link BOLD Constant
Run Code Online (Sandbox Code Playgroud)
而且因为我在终端设置中启用了透明度(在屏幕截图中不可见),所以颜色比此处看到的更柔和、更令人愉悦。
:set number如果您像我一样启用行号 ( ),请设置MANWIDTH为小于的值,COLUMNS这样您就不必横向滚动才能看到整个文本。MANWIDTH=75适用于 80 列终端。我使用与屏幕一样宽的下拉终端(160-240 列,具体取决于分辨率),因此固定终端MANWIDTH=80对我来说效果很好。
如果您看到它是粗体或带下划线的,您可能无法搜索它,因为您看到的内容是渲染的。
例如,如果文本来自任何格式化的联机帮助页,则它是通过将重击字符解释为
寻呼机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。如果有>
从输入流中读取的单词比名称,剩余的名称
| 归档时间: |
|
| 查看次数: |
2302 次 |
| 最近记录: |