最後に離れたのと同じ場所でマニュアル(または情報)ページを開きます。

最後に離れたのと同じ場所でマニュアル(または情報)ページを開きます。

私はマニュアルページがインストールされているソフトウェアに関するドキュメントの主なソースだと思います。参考用に使いたかっただけでなく、実際に最初から最後まで読んでみたかったです。

ここに問題があります。マニュアルページを閉じるとき、次回は私が残した場所で開くことを望みます。可能ですか?

理想的には、デフォルトのシステムポケットベルであるlessを使用します。ただし、そのトリックを実行できるポケットベルに変更できます。

たとえば、スタンドアロンvimは最後に読み取ったファイルの場所を記憶します。場所を記憶するためにポケットベルとして使用できる方法があるかもしれません。

コメント/回答を投稿する前にアイデアを試してください。

ベストアンサー1

ここに解決策がありますTxRVimをビューアとして使用するLisp。 Ubuntu 18でVim 8.0で動作します。

(あなたの好きな言語に翻訳してください。これは私のものです。私は自分で作りました。)

ファイルが呼び出され、mnpgr.tl次の場所にあります/path/to/mnpgr.tl

#!/usr/bin/env txr

(defvarl home-dir (getenv "HOME"))

(defvarl mnpgr-dir (path-cat home-dir ".mnpgr-dir"))

(defvarl vim-commands
         (join-with "|"
                    '("hi def link CtrlHUnderline Special"
                      "hi def link CtrlHBold Keyword"
                      "set syntax=ctrlh"
                      "syntax match CtrlHHide /.\\b/  contained conceal"
                      "set conceallevel=2"
                      "set concealcursor=nc"
                      "map q :q!\r")))

(ensure-dir mnpgr-dir)

(match @(or `@page(@section)`     ;; for "man whatever"
            `@page\\.@section`)   ;; for "man -l file.1"
       (getenv "MAN_PN")
  (with-resources ((rendered-file (path-cat mnpgr-dir `@page.@section`)
                                  (remove-path rendered-file)))
    (with-stream (s (open-file rendered-file "w"))
      (whilet ((line (get-line)))
        (put-line line s)))
    (sh `vim +'@{vim-commands}' '@{rendered-file}' < /dev/tty`)))

次のコマンドを使用してマニュアルページプログラムとしてインストールしました。

export MANPAGER=/path/to/mnpgr.tl

メモ:

  1. このプログラム$HOME.mnpgr-dir

  2. 出力をキャプチャしてman作業ディレクトリのファイルに保存します。ファイル名は、MAN_PNマニュアルページとセクション番号を提供する環境変数に基づいて計算されます。

  3. このファイルに対してVimを実行します。名前が安定しているので、Vimは最後の場所を覚えています。

  4. ファイルをアーカイブする必要はありませんので削除してください。 (with-resources範囲付きリソース制御にマクロを使用します。)

  5. このファイルには^H(バックスペース)再印刷エンコードが含まれています。 Vim 8には2005年からというツールを提供する構文定義がありますが、ctrlhそれほど効果的ではありません。ヒット作Ignoreのキャラクターのハイライトグループを使用し、隠されません。以前のVimバージョンには隠されたハイライトグループがあるようですIgnore+Vimコマンドラインの強力な機能を使用していくつかのコマンドを注入して構文を選択し、ホットctrlhパッチを適用してより良いパフォーマンスを得るようにしました。また、デフォルトの太字と下線の代わりに、太字と下線の強調表示グループをカラーカテゴリに再割り当てしました。

  6. map終了コマンドを追加しますq。アイデアはVimからコピーしたパターンです+MANPAGER。 (+MANPAGERバックスペースなしでプレーンテキストでページをレンダリングする必要があり、man元の太字と下線のマークアップの両方が失われるハッキー構文の強調を適用するため、これを使用しません。)

間違い:

  1. バックスペースと再描画で強調表示された項目は検索できません。。これは大きなことで、大きなことになることができます。これを処理する1つの方法は、プリプロセッサを使用してアイテムを別の表現に変換することです。たとえば、下線付きの単語_^Hw_^Ho_^Hr_^Hdをに変換できます^word^。適切な構文強調定義は下線を非表示にし、単語に色を付けて検索可能にします。これは、Vimのマニュアルで強調表示された単語が機能する方法です。

  2. マニュアルページの再読み込みを使用すると、:e %構文の修正プログラムが失われるため、ctrlhすべてのバックスペースと^H重複した印刷文字が表示されます。より良い解決策を得るには、独自の構文ハイライトを定義してファイルの種類と構文を定義し、mnpgrそれをファイルのサフィックスとして使用する必要があります。

  3. 同じ名前と競合するマニュアルページは区別されません。場合によっては、次のコマンドを使用してマニュアルページを表示する場合は、システムman -l <file>/usr/share/manman -l bash.1あなたもそれを使用すると仮定しますman bash。両方ともレンダリングされたファイルにマップされます~/.mnpgr-dir/bash.1

  4. shCと同様に、関数を使用するとsystem()潜在的な脱出の問題があります。一重引用符が含まれているvim-commandsと、rendered-fileその周囲の一重引用符が壊れます。


今ミニプロジェクトです。ここは誰の家ですか?

独自のVim構文定義ファイルがありますmnpgr.vim。プログラムはバックスペースカンクを解析し、で処理される独自のシンボルを生成しますmnpgr.vim

おすすめ記事