太字または下線付きのテキストを検索するにはどうすればよいですか?これは、多くの場合、そのように強調表示されているキーワードを検索するのに役立ちます。たとえば、このbash(1)
からの抜粋では次のようになります。
read
またはtimeout
を検索したい場合がありますが、それだけを検索すると、n
過去に必要な数十の役に立たない結果が得られます。これを減らすために使用できる「トリック」がいくつかありますが(たとえば、<Space>read<Space>
またはread \[
の検索)、すべてのマンページまたはキーワードで常に機能するとは限りません。
私はless
自体に特に執着していないことに注意してください。別のポケットベルを使用しても問題ありません。 less
はたまたまデフォルトのポケットベルです。
VimをMANPAGER
として使用します。 conceal および 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
バックスペースなどがまだ存在するため、*
を使用して単語を検索すると、同様に強調表示された単語のみが一致します。
太字の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
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>
オプションは、読み取り専用の変更不可能なスクラッチバッファーを作成し( Vim Wikiaのスクラッチバッファーはどのように作成されますか? を参照)、スワップファイルを無効にします。次に、この投稿の冒頭に記載されている設定を適用し、便宜上いくつかのマッピングを追加します-q
は現在のマンページを閉じ、 Spacebarless
のように、1ページ下に移動します。
~/.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には下線が引かれている、または太字になっている可能性のあるすべてのものを知る方法がないため、その方法で得られるよりもはるかに多くを失うことになります。
私自身の個人設定では、 モロカイcolorscheme 、set number
、航空会社のプラグイン、およびBOLD
の別の強調表示を使用しています。
highlight link BOLD Constant
また、端末設定で透明度を有効にしているため(スクリーンショットには表示されていません)、色はここで見られるよりも柔らかく、心地よいものになっています。
私のように行番号(:set number
)を有効にする場合は、MANWIDTH
をCOLUMNS
未満の値に設定して、テキスト全体を表示するために横にスクロールする必要がないようにします。 MANWIDTH=75
は80列の端末でうまく機能します。画面と同じ幅のドロップダウン端末(解像度に応じて160〜240列)を使用しているので、固定のMANWIDTH=80
で問題なく動作します。
私が知っているきれいな方法はありません。
less
が下線/太字を表示するために使用するバックスペースの特別な処理をオフにしてから、エスケープされたバックスペースを使用して必要な文字列を検索できます。
man less
)-U<Enter>
)<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」という単語を検索します。
私が言ったように、クリーン方法はありません。
EDIT: Stephaneがコメントで指摘しているように、リテラル<C-h>
の代わりにドット(任意の文字に一致)を使用すると、入力が簡単になります。
/l.le.es.ss.s
太字で検索するには、
/_.l_.e_.s_.s
下線付きを検索します。
それでも、最初にUNDERLINE-SPECIALをオフにする必要があります。これにより、下線付き/太字のテキストが読みにくくなります。
質問に対する直接の答えではありませんが、bash
のような大きなマニュアルでドキュメントをより簡単に見つけるには、次の方法を試すことができます。
info
のような別の形式を使用するほとんどのGNUソフトウェアのマニュアルのようなbash
マニュアルはtexinfoで書かれており、そこからいくつかのフォーマット(man、info、pdf、html ...)が派生しています。
マニュアルページは、理由からページと呼ばれます。これは、フォントの書式設定(インデント、太字、下線、すべて大文字)を介して構造化が行われる1つのフラットテキストファイルです。
このサイズのマニュアルの場合、ページよりも本が必要です。 -)。
man
はpageパラダイムを実装しますが、infoはbookを実装します-)パラダイム。章/セクション、目次、参照、索引の概念があり、すべて完了して検索できます。
Bashに関する本では、read
ビルトインについて学ぶために、インデックスを調べます。 info
にi
と入力し、read
(完了可能)と入力すると、read
ビルトインのドキュメントに直接移動します(,
を使用) read
を含む次のインデックスエントリにジャンプします)。 info
をinfo bash read
として開始することもできます。
本の中で、ビルトインに関するセクションを見たい場合は、インデックスをもう一度確認するか、目次を確認します。 info
でもi
およびg
と同じです。
HTMLは別のハイパーテキスト形式です(info
はWebとHTMLよりも前のものであることに注意してください)。より大きなマニュアルに適しています。 Webブラウザーは通常、一度に1ページしか検索できないため、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
[...]
関心のあるセクションに簡単に移動できるようにします(空の&
を入力して全文をもう一度表示するか、most
に:od
を入力します)。
太字または下線付きで表示されている場合は、renderedであるため、検索できない可能性があります。
たとえば、テキストがフォーマットされたマンページからのものである場合、重ね打ちされた文字を次のように解釈することによって生成されます。
less
ポケットベルFAQ解釈太字/下線:端末のビデオ属性を使用して、実際の太字/下線を表示します。
レンダリングの過程で、less
などの一般的なポケットベルは、textのみを保持しているように見せかけます(太字/下線部分は保持しません)テキスト)。
テキストエディタでは、バックスペースパターンを検索できます。おそらく、特定のエディター(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> 1つ行は、標準入力から、または-^ Hu ^ Hu optio> の引数として指定されたファイル 記述子_ ^ Hf_ ^ Hdから読み取られます。最初のWordが最初の_ ^に割り当てられます。 Hn_ ^ Ha_ ^ Hm_ ^ He、2番目の> 2番目の_ ^ Hn_ ^ Ha_ ^ Hm_ ^ Heなど、残りの単語とその> ing区切り文字が最後の_ ^に割り当てられます。 Hn_ ^ Ha_ ^ Hm_ ^ He。 > 単語が名前よりも入力ストリームから読み取られた場合、残りの名前
less -U
は、テキストをかなり読みにくくします。別の方法として、テキストを前処理して、ユニコード結合文字を使用して太字と下線を実装することもできます。たとえば、下線にU + 0332を使用し、太字をU +0333の二重下線として表します。
次のようなupager
スクリプトを作成できます。
#! /bin/bash -
ul=$'\u0332' bold=$'\u0333' bs=$'\b'
sed "s/\(.\)$bs\1/\1$bold/g;s/_$bs\(.\)/\1$ul/g" | less
次に:
export MANPAGER=upager
man bash
は次のようにレンダリングされます:
r̳e̳a̳d̳ [-̳e̳r̳s̳] [-̳a̳ a̲n̲a̲m̲e̲] [-̳d̳ d̲e̲l̲i̲m̲] [-̳i̳ t̲e̲x̲t̲] [-̳n̳ n̲c̲h̲a̲r̲s̲]
[-̳N̳ n̲c̲h̲a̲r̲s̲] [-̳p̳ p̲r̲o̲m̲p̲t̲] [-̳t̳ t̲i̲m̲e̲o̲u̲t̲] [-̳u̳ f̲d̲] [n̲a̲m̲e̲ ...]
One line is read from the standard input, or from
the file descriptor f̲d̲ supplied as an argument to
たとえば、太字または下線のread
を/r.e.a.d
で検索できます。
ただし、すべてのターミナルエミュレータがそれらの結合文字を正しくレンダリングするわけではないようです。 konsole
がこれまでで最高の結果をもたらしたことがわかりました。
xterm
でも機能する別の、おそらくより良いアプローチは、roffのフォーマットを維持しながら、すべての太字または下線の文字を非表示の文字で後置することです。このようにして、フォーマットに影響を与えずに、上記のように通常のread
を/read
で検索し、太字/下線read
を/r.e.a.d
で検索できます。
U + 200Bのような非表示の文字は、ゼロ幅スペースがless
によって<U+200B>
としてレンダリングされるため、オプションではありません。動作しているように見える文字はU + 034F 結合子結合子 です。これは結合文字であり、非表示であり、通常、少なくとも英語のテキストには影響しません。
したがって、次のようなgcjpager
ページャーを作成できます。
#! /bin/bash -
cgj=$'\u34f' bs=$'\b'
sed "s/.$bs./&$cgj/g" | less
(およびexport MANPAGER=/path/to/gcjpager
)。