less コマンドの多彩な機能とショートカットの組み合わせにより、ファイルの閲覧、検索、フィルタリング、ブックマーク、オプション切り替えなどを効率的に行える
- 複数のファイルを同時に開き、
:n, :p, :e, :d コマンドでファイル間の移動・追加・削除が可能
- 検索(
/, ?, n, N)とフィルタリング(&, &!)機能を活用して、特定のパターンをすばやく見つけたり除外したりできる
- ブックマーク(
m, ')と括弧対応機能によって、長い文書やコードファイル内での位置移動を簡単にできる
- **実行中のオプショントグル(
-S, -R, -N など)と外部コマンド実行(!)**により、less を終了せずに環境を即座に調整できる
複数ファイルの扱い
less はパイプラインの末尾でだけ使うツールではなく、複数のファイルを引数として直接開ける
- 例:
less file1 file2 file3
- 実行中でも
:e file.h コマンドで 新しいファイルを追加できる
:n で 次のファイル、:p で 前のファイル、:x または :rewind で 最初のファイルへ移動できる
:d コマンドで 現在のファイルを一覧から削除できる
ナビゲーション機能
3141G のように 数字+G を入力すると、特定の 行番号へ移動
75% のように 数字+% で、ファイル内の 割合位置へジャンプ
/パターン で 前方検索、?パターン で 後方検索、n/N で 次/前の結果へ移動
!パターン は 一致しない行を検索、* は 複数ファイルにまたがる検索、@ は 最初のファイルから検索開始、@* は 全ファイル全体を検索
フィルタリング機能
&パターン で そのパターンに一致する行だけを表示し、内部 grep のように動作する
&!パターン で パターンに一致しない行だけを表示し、ログファイルの調査に便利
ブックマークと括弧対応
m + 文字で ブックマークを設定、' + 文字で その位置へ移動
- 例:
mo で OPTIONS セクション、me で EXAMPLES セクションにブックマークし、'o, 'e で移動
(、[、{ などの括弧が画面の先頭行にある場合、対応する括弧を入力すると対になる括弧へジャンプ
alt+ctrl+b などで ユーザー定義の括弧ペアを指定できる
オプション切り替えと外部コマンド実行
- 実行中に
- の後へオプションを入力して 設定を即座に変更可能
-S: 行の折り返し切り替え
-G: 検索ハイライト
-i/-I: 大文字小文字の区別設定
-R: ANSI カラー表示
-N/-n: 行番号の表示/非表示
! コマンドで 外部コマンドを実行できる(!date, !bc など)
環境変数とその他の機能
- よく使うオプションは 環境変数
$LESS に保存できる
- 例:
LESS="-RNe" → カラー表示、行番号表示、ファイル末尾で自動終了
v コマンドで 現在のファイルを $VISUAL エディタで開く
o または O コマンドで 標準入力から読んだ内容をファイルへ保存できる
less は ctags ベースの タグジャンプ機能をサポートするが、使用頻度は低い
1件のコメント
Hacker Newsのコメント
follow機能が抜けていたのは意外だった。最初は少し 変なUX に感じるが、慣れるとtailより優れていることが多いless +Fで起動すると、入力ストリームやファイルをリアルタイムで追いかけて表示する。<C-c>でフォローを止めて通常のlessのように閲覧でき、再びF(大文字)を押すとフォローを再開できるkubectl logs | less +F)をフォロー中に<C-c>を押すと、パイプ全体のプロセスが終了してしまい、再度Fでフォローを再開できなくなる。lessには<C-x>でフォローを止める代替手段があるが、ほとんどのシェルがこのキーを横取りするtailでは Enter を押して最終行の下に 空行 を追加できる。複数回の実行結果を見分けやすくなるので、この機能ひとつのために今でもtailを使っている-Xまたは--no-initオプションは、終了時に画面を消さないようにしてくれる。私はたいてい 画面を保持 して、前の内容を参照したりコピー&ペーストできるようにしておくのを好む-Xの挙動をたまにだけ使いたいなら、このスレッドのヒント を参照できる-Eと一緒に使うと、出力がターミナルサイズより小さいとき即座に終了する。いくつかのオプションを組み合わせて「less -SEXIER」をよく使う。覚えやすい長いログをデバッグするときは、
&で読みたい部分だけをフィルタし、&!で不要な部分を除外する。正規表現 もサポートしている。遅いこともあるが、その場でフィルタリングしたいときに便利便利なコツが2つある
-Lオプションは入力ファイルの前処理をスキップし、ログファイル名がlogfile.1、logfile.2のようにローテーションされている場合にnroffとして誤処理されるのを防ぐまた、検索時に最初の文字として
Ctrl-Rを入力すると、正規表現ではなくリテラル文字列 として検索できる~/.lesskeyファイルでキーバインドを設定できる。私はsを後方スクロールに割り当て、dとsで片手で素早くページアップ/ダウンしているmacOS 標準の
lessにはこの機能がないため、Homebrew でインストールする必要がある(設定例、関連説明)Nを next-file に割り当てている。macOS に lesskey がないのは本当に不便だOpenBSD の
manはlessにタグを渡し、:t testのように特定のセクションへ直接ジャンプできる。面白い機能だが、実際にはほとんど使わない。単に
/で検索する 一貫したインターフェース のほうが直感的だ。ちなみに BSD 系は
mdocマクロセットを使って 意味ベースの文書 を作り、OpenBSD はそれをレンダリングするためにmandocプログラムを使っている(mdoc 文書)^qでlessを終了しつつ画面を消さないようにし、通常のqはこれまでどおり終了後に画面を消すよう設定できるlessは-Xなしで実行する必要があり、git logのように前の出力内容を参照したいときに特に便利lessには外部コマンドへ パイプ する機能もある。たとえば
maでマークを置き、|aで現在位置からそのマークまでの内容を外部コマンドへ送れる。ニュースやメールの一部を保存したいときに便利だ。
また
-jオプションで、検索結果を画面上端から何行下に表示するか調整できるgit logで活用している。コミットを選んだあと、ショートカットでgit showを実行したり、直接 fixup 作業を行ったりする。bashのデバッグトラップとkeyd-application-mapperを使って現在実行中のコマンドを検知し、そのコミットハッシュを抽出してスクリプトで処理しているless(1)の 正規表現エンジンが遅すぎる。大きなファイルを扱うときはgrepやripgrepで検索して、その結果をlessに渡して見ているsキーでパイプデータをファイルに保存できる。コピー&ペーストよりずっと楽だlessで見て、役に立つ結果だったときだけsで保存する。teeを使ってもよいが、あれは常にファイルを残すので、不要な場合には非効率だ