1 ポイント 投稿者 GN⁺ 2026-01-04 | 1件のコメント | WhatsAppで共有
  • 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 コマンドで 標準入力から読んだ内容をファイルへ保存できる
  • lessctags ベースの タグジャンプ機能をサポートするが、使用頻度は低い

1件のコメント

 
GN⁺ 2026-01-04
Hacker Newsのコメント
  • follow 機能が抜けていたのは意外だった。最初は少し 変なUX に感じるが、慣れると tail より優れていることが多い
    less +F で起動すると、入力ストリームやファイルをリアルタイムで追いかけて表示する。<C-c> でフォローを止めて通常の less のように閲覧でき、再び F(大文字)を押すとフォローを再開できる

    • パイプ入力(kubectl logs | less +F)をフォロー中に <C-c> を押すと、パイプ全体のプロセスが終了してしまい、再度 F でフォローを再開できなくなる。less には <C-x> でフォローを止める代替手段があるが、ほとんどのシェルがこのキーを横取りする
    • tail では Enter を押して最終行の下に 空行 を追加できる。複数回の実行結果を見分けやすくなるので、この機能ひとつのために今でも tail を使っている
    • 「少し変だ」というより UXが悪い と思う。わざわざモード切り替えを要求する必要はなく、新しいデータが来たら自動更新されてほしい
    • 新しい出力が自動で追加されつつ、同時に閲覧もできるモードがあればいい。ターミナルのような 自動スクロールのトグル だけで十分だと思う
    • 以前は「follow」はファイルディスクリプタを特別に扱う複雑な機能だと思っていたが、実際には単に EOF以降もポーリングし続ける だけだった。つまり通常のファイルオープンとフォローモードの間に本質的な違いはなく、ソフトウェア側で簡単に切り替えられる
  • -X または --no-init オプションは、終了時に画面を消さないようにしてくれる。私はたいてい 画面を保持 して、前の内容を参照したりコピー&ペーストできるようにしておくのを好む

    • -X の挙動をたまにだけ使いたいなら、このスレッドのヒント を参照できる
    • -E と一緒に使うと、出力がターミナルサイズより小さいとき即座に終了する。いくつかのオプションを組み合わせて「less -SEXIER」をよく使う。覚えやすい
  • 長いログをデバッグするときは、& で読みたい部分だけをフィルタし、&! で不要な部分を除外する。正規表現 もサポートしている。遅いこともあるが、その場でフィルタリングしたいときに便利

  • 便利なコツが2つある
    -L オプションは入力ファイルの前処理をスキップし、ログファイル名が logfile.1logfile.2 のようにローテーションされている場合に nroff として誤処理されるのを防ぐ
    また、検索時に最初の文字として Ctrl-R を入力すると、正規表現ではなくリテラル文字列 として検索できる

  • ~/.lesskey ファイルでキーバインドを設定できる。私は s を後方スクロールに割り当て、ds で片手で素早くページアップ/ダウンしている
    macOS 標準の less にはこの機能がないため、Homebrew でインストールする必要がある(設定例関連説明

    • 私も Nnext-file に割り当てている。macOS に lesskey がないのは本当に不便だ
  • OpenBSD の manless にタグを渡し、:t test のように特定のセクションへ直接ジャンプできる。面白い機能だが、実際にはほとんど使わない。
    単に / で検索する 一貫したインターフェース のほうが直感的だ。
    ちなみに BSD 系は mdoc マクロセットを使って 意味ベースの文書 を作り、OpenBSD はそれをレンダリングするために mandoc プログラムを使っている(mdoc 文書

  • ^qless を終了しつつ画面を消さないようにし、通常の q はこれまでどおり終了後に画面を消すよう設定できる

    echo '^q toggle-option -redraw-screen\nq' >> ~/.config/lesskey
    

    less-X なしで実行する必要があり、git log のように前の出力内容を参照したいときに特に便利

  • less には外部コマンドへ パイプ する機能もある。
    たとえば ma でマークを置き、|a で現在位置からそのマークまでの内容を外部コマンドへ送れる。
    ニュースやメールの一部を保存したいときに便利だ。
    また -j オプションで、検索結果を画面上端から何行下に表示するか調整できる

    • 私もこのパイプ機能を git log で活用している。コミットを選んだあと、ショートカットで git show を実行したり、直接 fixup 作業を行ったりする。
      bash のデバッグトラップと keyd-application-mapper を使って現在実行中のコマンドを検知し、そのコミットハッシュを抽出してスクリプトで処理している
  • less(1)正規表現エンジンが遅すぎる。大きなファイルを扱うときは grepripgrep で検索して、その結果を less に渡して見ている

  • s キーでパイプデータをファイルに保存できる。コピー&ペーストよりずっと楽だ

    • 私もこの機能をよく使う。時間のかかるプロセスの出力を less で見て、役に立つ結果だったときだけ s で保存する。
      tee を使ってもよいが、あれは常にファイルを残すので、不要な場合には非効率だ